2010-01-22 2 views
3

C++ COM 클라이언트에서 호출되는 C# .NET 어셈블리가 있습니다. 클라이언트 프로세스가 명시 적으로 COM 개체를 릴리스하면 CCW는 내부 참조를 릴리스하므로 .NET 개체가 가비지 수집 대상입니다.COM 호출 가능 래퍼 및 .NET 개체 수명

.NET 개체에 로그 파일을 여는 정적 생성자가 있으면 어떻게 될까요? 클라이언트의 명시 적 요청없이 로그 파일을 닫는 우아한 솔루션이 있습니까?

TIA.

답변

1

AppDomain.ProcessExit EventHandler를 사용하여 일부 테스트를 수행 한 후에 로그 파일을 닫는 것이 좋습니다.

0

COM 클라이언트를 수정하지 않으려는 경우 확정적 인 닫는 마법에 대한 행운을 얻지 못했습니다. 핸들의 파이널 라이저는 GC에 의해 호출 할 때 CCW는 GC 루트 상실 후 궁극적으로 파일이 미래의 어떤 시점에 종료됩니다 처리 (가정 그것은하여 FileStream입니다) (들).

-Oisin

+0

클라이언트 프로세스가 끝나면 Finalizer가 호출됩니까? –

+0

in-process COM 서버 인 경우 : 예. –

+0

AppDomain.ProcessExit EventHandler를 사용하여 일부 테스트를 수행 한 후에 로그 파일을 닫는 것이 좋습니다. –