문제

Visual Studio,할 때 내가 입력 라인은"Implements IDisposable"IDE 자동으로 추가됩:

  • a disposedValue 회원 가변
  • a Sub Dispose() Implements IDisposable.Dispose
  • a Sub Dispose(ByVal disposing As Boolean)

Dispose() 해야 혼자 남겨,그리고 정해야 하는 코드에 넣 Dispose(disposing).

그러나 이 폐기 Finalize 패턴 수도 override Sub Finalize() 전화 Dispose(False).하지 않는 이유는 무엇 IDE 또한 추가 이?해 추가 그것을 자신을,또는 그것은 어떻게든 이라는 암시적으로?

편집: 어떤 아이디어를 왜 IDE 자동으로 추가의 80%는 필요한 물건 하지만 밖으로 나뭇잎을 마무리 방법이 있나요?지 않는 이것의 요점의 종류는 기능하는 데 도움 당신 잊으로서 이러한 일을 알지 못하느냐?

EDIT2: 모두 감사합니다 당신의 우수한 답변,지금 이것이 완벽한 감각!

도움이 되었습니까?

해결책

는 경우에 당신은 실제로 들고 비-관리하는 리소스지 않을 것이 자동으로 청소하여 가비지 컬렉터와 청소들에서 당신의 처분(),다음 예에,당신은 동일한 작업을 수행해야에서 마무리().

을 구현하는 경우 IDisposable 다른 이유로,구현을 마무리()이 필요하지 않습니다.

기본적인 질문은 이것입니다:는 경우 폐기()호출되지 않았고 객체가 쓰레기 수집된 것,메모리 누수가?그렇다면,구현을 마무리.지 않는 경우,당신이 할 필요가 없습니다.또한,피해를 구현을 마무리"그냥 때문에 더 안전한".개체와 사용자 정의 종료자할 수 있는 잠재적으로 필요 두 GC 전달하면 그들에 넣어 보류 중인 종료자 큐,그리고 두 번째 전달하는 실제로는 무료 자신의 메모리입니다.

다른 팁

No,당신은 당신이 필요하지 않을 마무리하지 않는 한 당신이 관리되지 않는 자원을 확대할 예정입니다.

대부분의 경우에 이 클래스는 처분할 수 있기 때문에 그것을 참조하여 관리되는 다른 IDisposable 개체입니다.이 경우에 없을 마무리 방법이 필요하거나 바람직합니다.

Implements IDisposable

Public Overloads Sub Dispose() Implements IDisposable.Dispose

    Dispose(True)
    GC.SuppressFinalize(Me)

End Sub

Protected Overloads Sub Dispose(ByVal disposing As Boolean)

    If disposing Then
        ' Free other state (managed objects).
    End If
    ' Free your own state (unmanaged objects).
    ' Set large fields to null.
End Sub

Protected Overrides Sub Finalize()

    Dispose(False)
    MyBase.Finalize()

End Sub

으로 다른 사람이 말했다,당신은 당신이 필요하지 않을 종료자를 구현하지 않는 한 당신이 직접 들고 관리되지 않는 자원입니다.또한,고 가정하고 작업 시에는.NET2.0 나 나중에,그것이 당신이 이제까지 구현에 필요한 종료자 때문에 일반적으로 SafeHandle 을 포장하는 데 사용할 수 있습하는 관리되지 않는 자원입니다.

상당히 긴 블로그 게시물 을 덮는 배경과의 구현 IDisposable 및 종료자는 다시할 수 있는 읽기 가치가있는 경우에 당신을 완전히 명확하지 않다.

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