developer tip

가비지 수집기가 Dispose ()를 호출합니까?

copycodes 2020. 12. 9. 08:22
반응형

가비지 수집기가 Dispose ()를 호출합니까?


이 질문에 이미 답변이 있습니다.

프로그램이 그렇지 않은 경우 GC가 결국 Dispose를 호출 할 것이라고 생각했지만 프로그램에서 Dispose ()를 호출하여 정리를 결정적으로 만들어야한다고 생각했습니다.

그러나 내 작은 테스트 프로그램에서 Dispose가 호출되는 것을 전혀 보지 못했습니다 ....

public class Test : IDisposable
{
    static void Main(string[] args)
    {
        Test s = new Test();
        s = null;
        GC.Collect();
        Console.ReadLine();
    }

    public Test()
    {
        Console.WriteLine("Constructor");
    }

    public void Dispose()
    {
        Console.WriteLine("Dispose");
    }
}

// 출력은 "생성자"일 뿐이며 예상대로 "Dispose"가 표시되지 않습니다. 뭐야?

편집 : 예, Dispose ()를 호출해야한다는 것을 알고 있습니다. 일회용 개체를 사용할 때 표준 패턴을 따릅니다. 내 질문은 관리되는 C ++ (다른 스레드의 좋은 주제가 될 또 다른 복잡성 계층) 인 다른 사람의 코드에서 누수를 추적하려고하기 때문에 발생합니다.


GC는를 호출하지 않고 종료자를 Dispose호출합니다 (호출해야 함 Dispose(false)).

측면의 관련 게시물을 보거나 Dispose 패턴에 대한 C # 모범 사례를 찾아보십시오 ( 문서는IDisposable IIRC를 잘 설명합니다.)


짧은 대답은 "아니오"입니다. 더 자세한 답변은 ".NET 가비지 수집기에 의존하는 것이 나쁜 습관 입니까? ""Dispose ()를 호출하지 않으면 어떻게됩니까 ?" 에 대한 내 대답에서 찾을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/1691846/does-garbage-collector-call-dispose

반응형