가비지 컬렉션:그것은 필요한 설정하는 대체 null 에는 폐기하는 방법?
-
09-06-2019 - |
문제
그것은 필요한 설정하는 대체 null
를 구현하는 경우 Dispose()
방법?
해결책
일반적이지 않습니다.
쓰레기 수집가를 찾 뿌리를 개체 및 순환 의존하지 않을 방지 수집하지 않으면 개체입니다.
경고가 있:면 개체에 대한 참조가 있는 객체 B B 개체되고 처리할 수 있습을 청소하는 관계 또는 다른 당신은 끝날 수 있었습니다.가장 일반적인 이면에서의 이벤트 처리기(참조에서는 A>B 에는 B 컨트롤하기 때문에,그것에 가입한 이벤트에).이 경우에는 경우는 여전히 뿌리,B 수집할 수 없더라도 그것은 삭제됩니다.
다른 팁
클래스 경우에는 폐기하는 방법는 것이 좋습니다입니다.는 이유 뒤로는 처분을 실행할 때라고 하는 반면,객체를 설정하기 null 단순히 추가 진입을 완료 큐에서는 GC,그리고 우리는 없 를 결정할 때 GC 실행됩니다.
없는 성능을 구현하는 폐기하는 방법에만 사용하는 리소스 관리(예:배열)기 때문에 그들은 자동으로 회수하여 쓰레기를 수집기.를 사용하여 폐기하는 방법에 주로 관리되는 개체를 사용하는 네이티브 리소스 및 COM 체에 노출되는.NET Framework.관리 물체를 사용하는 출원(과 같은 을 클래스)를 구현하 IDisposable 인터페이스입니다.
우아한 의미의 inoking 폐기 채택 사용한"사용"입니다.당신의 사람들을 위해 수 있습에 익숙하지 않을 구축,그것은 수단을 제공 implicity invoke()폐기에 인스턴스를 구현하는 IDisposable 경우에도 예외가 발생 이후의 동작이다.다음의 예를 사용하여 구성:
using(DisposableClass dc = new DisposableClass())
{
dc.PerformActionOnUmanagedResources();
dc.PerformAnotherActionOnUmanagedResources();
}
에 이전 예 경우 예외가 발생했에 PerformActionOnUmanagedResources()메소드지만,PerformAnotherActionOnUmanagedResources()메서드 처리 되지 않는,사용이 아직도 implicity 를 호출하여 폐기하는 방법에 대 dc 을 보장 realese 의 모든 관리되지 않는 자원입니다.
의 목적을 폐기하는 방법을 출시 모든 자원과 관련된 클래스고,부모의 클래스를 호출하여 기본 클래스 dispose 방법입니다.의 읽기에 대해 명확하게 약간의:
당신은 무엇을 의미하"대체"?
당신은 적어도 Dispose()를 호출에 모든 멤버 구현하 IDisposable,하지만.
그것은 필요하지 않습으로 다른 사람들이 지적하지만,그것은 좋은 연습하고 디버깅하는 데 도움이됩.
한 번체가 완료되면으로 포인터를 사용하여 설정한 다음 그것을 null 로을 방지하는 데 도움이 다시 사용하는 개체 이상(당신을 얻을 것 null 참조은 예외).
같은 논리에 적용하여 설정하는 회원 포인터가 null 로 C++에서 소멸자면 삭제됩니다.이 없 요 하지만,문제 해결에 도움이다.
생각의 목적에 대한 처분할 수 있는 방법을 조금:그것은 일반적으로 있기 때문에 당신을 들고 일부 자원을 공개되지 않습니다 동안 가비지 컬렉션입니다.이것은 일반적으로 다음과 같이 데이터베이스 연결 또는 파일을 처리합니다.따라서,일단 폐기 메소드가 호출되는 모든 그러한 자원이 출시되었습니다.
나는 주장을 널 떠 더 유해 그는 것은"좀비"물체 주위에 떠있는.