문제

예를 들어,

int myResult= (new UnmanagedResourceUsingMemorySuckingPig()).GetThingsDone(id);

사용 블록 사용, 사용 블록을 사용하는 명백한 방법, Dispose ()를 호출하는 명백한 방법이 없습니다. 물론 관리되지 않는 ResourceusingMemorySuckingPig는 idisposable을 구현합니다.

도움이 되었습니까?

해결책

해당 클래스의 최종화기가 호출되는 경우 Dispose(), 예. 그렇지 않다면, 아니요.

(편집하다) 일부 추가 정보:

처분이 호출 될 것이라고 가정하지 마십시오. 유형이 소유 한 관리되지 않은 리소스는 처분되지 않은 경우 최종 방법으로 릴리스되어야합니다.

편집하다

위의 편집을 명확히하기 위해, 나는 많은 사람들 (이 스레드에서 SO, 그리고 다른 곳에서)을 보았습니다. "GC가 전화 할 것입니다. Dispose() 객체가 제거 될 때. "이것은 전혀 그렇지 않습니다. 예, 구성 요소를 작성하는 좋은 방어 코더는 Dispose() 명시 적으로 부름을받지 않으며 결승전에서 그렇게합니다. 그러나 구성 요소를 사용하는 양호하고 방어적인 코더는 Finalizer가 호출하지 않는다고 가정해야합니다. Dispose(). 자동 호출이 없습니다 Dispose() 쓰레기 수집가에서. 이 기능은 Finalizer가 호출하는 경우에만 해당됩니다. Dispose().

다른 팁

나는 그렇게 믿지 않는다. 당신은 다음을 작성해야합니다.

 using (UnmanagedResourceUsingMemorySuckingPig urumsp = new UnmanagedResourceUsingMemorySuckingPig()) 
{
  myResult= urumsp.GetThingsDone(id);
}

파이널 라이저 (Destructor)가있는 경우에만 호출 될 수 있습니다. 최종화기가 호출 할 수 있습니다 Dispose() 그러나 일반적인 구현은 최종화기와 Dispose() 전화 protected Dispose(bool).

다시 말해, 그것은의 이행에 달려 있습니다. UnmanagedResourceUsingMemorySuckingPig , 가이드 라인을 따르는 경우 익명 객체가 정리되지만 using 차단하다.

그러나 GC는 결국 객체를 수집하여 최종화 가능하다는 것을 알게되며 (최종화 가능합니까?) 마무리 할 것입니다. 처분은 자원을 결정적으로 정리하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top