2012-01-31 2 views
0

개체에 대한 참조가없고 그 시점에서 .NET 가비지 수집기에서 개체를 삭제해야한다는 것을 어떻게 알 수 있습니까?개체 삭제/참조 해제되지 않음 검사

개체를 복제하는 중입니다. 같은 객체이기 때문에 복제하는 이유는 나중에 다른 값을가집니다. 어떤 클래스의 속성에서 객체를 참조 해제 할 때 어떤 특정 객체가 어디에서 참조되고 있는지 알 수 없습니다. 내 생각은 특정 참조되지 않은 객체를 어디서나 참조하면 안된다는 것을 확실히 알아야합니다. 그것들이 다른 곳에서 참조된다면, 그것을 참조 해제해야합니다 (수정하십시오).

제 아이디어는 가비지 수집 및 공간 확보를 위해 시스템의 모든 곳에서 개체의 특정 클론을 참조 해제하는 것입니다.

어쨌든이 개체를 확인합니까. .NET? 도서관 같은 곳이 있습니까? 나는이 프로그램이 거대하기 때문에 내가 삭제 한 것으로 생각하는 대상이 여전히 실행 중일 때 내 프로그램의 어딘가에서 참조되고 있다고 느낍니다. 다른 곳에서 참조되기 때문에 가비지 수집되지 않습니다.

도움 주셔서 감사합니다.

+1

메모리 프로파일 러를 사용하여 문제를 추적하고 싶을 수도 있습니다 ... – Yahia

답변

1

WeakReference 클래스를 사용하여 개체에 대한 참조를 보유하고 해당 개체가 여전히 존재하는지 또는 가가비비 수집 (완료 및 할당 취소)되었는지 알 수있는 IsAlive 속성을 확인할 수 있습니다. 귀하의 경우에 대한 WeakReference의 주요 이점은 GC가 객체 대상을 처리하는 것을 방지하지 않는다는 것입니다.

확률을 낮추기 위해 검사 전에 가비지 수집기를 명시 적으로 호출하여 해당 개체에 대한 다른 참조가 없으며 GC가 아직 눈치 채지 못했습니다. 그러나 '야생에서'개체에 대한 특정 양의 참조가 있는지 여부는 확실하게 알 수 없습니다.

+0

마지막 문장에서 "야생에서 개체 참조"는 무엇입니까? " –

+0

'in the wild'= 다른 곳에서는 응용 프로그램 도메인, 심지어 존재하지 않을 수도있는 장소 포함 :-) –

관련 문제