C# Finalizer

Featured image

Git Source
Memory Flow


Finalizer

Finalizer 정의

Finalizer 호출 시점

GC - Finalizer 관계

Finalizer

문제점

중복 호출

class Foo
{
    private StreamWriter sw { get; set; }

    public Foo()
    {
        sw = new StreamWriter(@"C:\test.txt");
    }

    ~Foo()
    {
        sw?.Close();
    }    
}
처리되지 않은 예외: System.ObjectDisposedException: 닫혀 있는 파일에 액세스할 수 없습니다.
위치: System.IO.__Error.FileNotOpen()
위치: System.IO.FileStream.Flush(Boolean flushToDisk)
위치: System.IO.FileStream.Flush()
위치: System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
위치: System.IO.StreamWriter.Dispose(Boolean disposing)
위치: System.IO.StreamWriter.Close()
위치: _20_0802.Foo.Finalize()

Disposable 패턴


Reference

Finalizer 사용 시 주의 사항들