2016-10-18 4 views
1

나는이 같은 우리의 코드베이스 코드를 발견하십시오하여 ComObject로Finalizer에서 Marshall.ReleaseComObject를 호출 할 수 있습니까?

if (disposing) 
{ 
    .... 
} 
Marshal.ReleaseComObject(comObject) 

사실 .NET 개체입니다 (?를 RCW, 오른쪽)이 종료 자에서 호출하는 것이 안전합니다?

이미 출시되었을 가능성이 있습니까? Hans Passant으로

+1

아니요, 안전하지 않습니다. RCW에는 이미 자체 완성자가 있습니다. 무엇보다도 코드를 완전히 불필요하게 만듭니다. 보다 심각한 문제는 finalization 순서가 결정적이지 않기 때문에 이미 파괴 된 객체에 대해 ReleaseComObject()를 호출 할 수 있습니다. –

+0

감사합니다. 답으로 입력하면 솔루션으로 표시됩니다. –

+0

확실히 더 나은 답변을 게시 할 수 있습니까? 파괴 된 객체에서 ReleaseComObject()를 호출 할 때 어떤 일이 발생하는지 모르겠다. –

답변

1

는 말했다 :

가 아니,이 RCW는 이미 자신의 파이널을 가지고, 안전하지 않습니다. 어떤 코드가 완전히 불필요한 지 입니다. 더 심각하게, 마무리 순서 이후 는 (폐기) 경우에 따라서 호출이 안에 있어야 이미

파괴되는 객체에 ReleaseComObject()를 호출 할 수있는 결정이 아니다.

관련 문제