developer tip

소멸자, 폐기 및 종료 방법의 차이점

optionbox 2020. 11. 28. 09:08
반응형

소멸자, 폐기 및 종료 방법의 차이점


C #에서 가비지 수집기가 어떻게 작동하는지 연구하고 있습니다. Destructor, DisposeFinalize메서드 사용에 대해 혼란 스럽습니다 .

내 연구와 이해에 따라 클래스 내에 Destructor 메서드를 사용하면 클래스의 인스턴스에서 명시 적으로 호출 할 수없는 소멸자 메서드에서 언급 한 방식으로 가비지 수집을 수행하도록 가비지 수집기에 지시 할 수 있습니다.

Dispose메서드는 사용자가 가비지 컬렉션을 제어 할 수 있도록합니다. Finalize메서드는 개체 자체가 아닌 클래스에서 사용하는 리소스를 해제합니다.

나는 그것을 올바른 방법으로 이해하는지 잘 모르겠습니다. 의심을 명확히 해주세요. 추가 링크 또는 가이드를 환영합니다.


소멸자는 Finalize 메서드를 암시 적으로 호출하며 기술적으로 동일합니다. Dispose는 IDisposable 인터페이스를 구현하는 개체와 함께 사용할 수 있습니다.

당신은 볼 수 있습니다 : 소멸자 C #-MSDN

소멸자는 개체의 기본 클래스에서 Finalize를 암시 적으로 호출합니다.

동일한 링크의 예 :

class Car
{
    ~Car()  // destructor
    {
        // cleanup statements...
    }
}

소멸자 코드는 암시 적으로 다음 코드로 변환됩니다.

protected override void Finalize()
{
    try
    {
        // Cleanup statements...
    }
    finally
    {
        base.Finalize();
    }
}

소멸자에 대한 이해가 옳습니다.

에서 MSDN

프로그래머는이 가비지 컬렉터에 의해 결정되기 때문에 소멸자가 호출 될 때 제어하지 않는다 . 가비지 수집기는 응용 프로그램에서 더 이상 사용하지 않는 개체를 확인합니다. 객체가 소멸 될 수 있다고 생각하면 소멸자를 호출하고 (있는 경우) 객체를 저장하는 데 사용 된 메모리를 회수합니다. 프로그램이 종료 될 때도 소멸자가 호출됩니다. Collect를 호출하여 가비지 수집을 강제 할 수 있지만 대부분의 경우 성능 문제를 일으킬 수 있으므로 피해야합니다.


C # 용어에서 소멸자와 종료자는 기본적으로 상호 교환 가능한 개념이며, 유형이 수집 될 때 관리되지 않는 리소스 (예 : 외부 핸들) 를 해제하는 데 사용해야 합니다. 종료 자를 작성해야하는 경우 매우 드뭅니다.

그 문제는 GC가 비 결정적이라는 것입니다. 따라서 Dispose()방법 (via IDisposable)은 결정 론적 정리 를 지원할 수 있습니다 . 이것은 가비지 수집과 관련이 없으며 호출자가 모든 리소스를 더 빨리 해제 할 수 있도록합니다 . 또한 사용하기에 적합하다 관리 당신이하는 유형이있는 경우, 예를 들어, (관리되지 않는 이외에) 자원 캡슐화 (말) 데이터베이스 연결, 당신은 너무 연결을 해제 유형을 폐기 할 수도 있습니다.

참고 URL : https://stackoverflow.com/questions/13988334/difference-between-destructor-dispose-and-finalize-method

반응형