2012-09-26 3 views
5

Visual Studio 프로젝트에서 일부 COM 라이브러리에 대한 참조를 추가했습니다. 이제 메서드에서 만들고 개체를 만들면 프로그램에서 해당 메서드를 떠날 때이 COM 개체가 자동으로 해제됩니까? 아니면 항상 이러한 객체를 수동으로 해제해야합니까? (ReleaseComObject 또는 FinalReleaseComObject?).COM 개체 해제

+1

이 더 많은이 호출해서는 안 [여기] (http://stackoverflow.com/questions/1827059/why-use-finalreleasecomobject-instead-of-releasecomobject) – StuartLC

+1

기사를 모두 터프하고 지루한 것처럼 조사 할 시간을 가지십시오. 예 : http : // blogs.msdn.com/b/visualstudio/archive/2010/03/01/marshal-releasecomobject-considered-dangerous.aspx –

답변

3

그것은 확실히 자동으로 수행하지, 그리고 경우에 따라서는 as described in this blog post (Marshal.ReleaseComObject를 호출하여) 그렇게 위험 할 수 있습니다.

In-Proc COM 개체의 경우 COM 개체를 전혀 해제 할 필요가없는 경우가 종종 있습니다.

Out-Proc COM 개체의 경우 Office apps failing to shut down after automation from a .NET client과 같은 문제가 발생하지 않도록 Out-Proc COM 개체를 해제하는 것이 중요 할 수 있습니다. 이 경우

, 나는 위의 링크 된 블로그 게시물의 조언을 따를 것 :

당신은 당신이 안전하게 그것에 ReleaseComObject를 호출 할 수 있습니다 스코프, 단일 스레드 방식으로 COM 개체를 사용하는 경우 당신이 그것을 끝내면 개체.

그러나 응용 프로그램에서 여러 위치 또는 여러 스레드에서 COM 개체를 사용하는 경우 (또는 동일한 프로세스에서 다른 응용 프로그램에서), 당신은 ReleaseComObject이