문제는 우리가 왜 전화해야하는지입니다.Dispose()
어떤 물건에? 가비지 콜렉터가 범위를 벗어날 때 오브젝트를 수집하지 않는 이유는 무엇입니까? 나는 그것이 왜 그렇게 구현되었는지에 대한 이유를 이해하려고 노력하고 있습니다. 내 말은,Dispose()
가비지 수집기가 범위 객체에서 수집 될 때 호출되었습니다.
가비지 컬렉터는 비 결정적입니다.어떤 점에서그들이 더 이상 언급되지 않은 후에는 적시에 일어날 수 있다고 보장하지 않습니다. 순환 적 종속성을 허용하고 카운터 전체를 증가 및 감소시키지 않는 성능 이점을 포함하여 참조 계산에 비해 여러 가지 이점이 있습니다.
그러나, 그것은할까요적시에 (데이터베이스 연결, 파일 핸들 등 - 메모리 이외의 거의 모든 것) 정리할 수 있습니다. 그래도 명시 적으로 리소스를 삭제해야합니다. 그만큼using
성명서는 이것을 꽤 쉽게 만듭니다.
Dispose는 관리되지 않는 리소스 (예 : 데이터베이스 연결 래퍼, 이전 COM 라이브러리 등)를 정리하는 데 사용됩니다.
편집하다:추가 정보가 담긴 일부 MSDN 링크 :
http://msdn.microsoft.com/en-us/library/b1yfkh5e(VS.71).aspx
http://msdn.microsoft.com/en-us/library/0xy59wtx(VS.71).aspx
가비지 수집기가 개체를 회수 할 때 관리되지 않는 리소스에 어떤 일이 발생하는지 지정하려면 보호 된 Finalize () 메서드를 재정의해야합니다.http://msdn.microsoft.com/en-us/library/system.object.finalize(VS.71).aspx