2012-09-04 4 views
0

질문에 거의 다 나와 있습니다. 어딘가에 내 코드에서 ObjectXnew 키워드 개체를 인스턴스화. 이제 ObjectX은 메모리 및 기타 리소스면에서 값 비싼 제품입니다. 런타임에 ObjectX이 현재 살아 있고 응용 프로그램에서 사용되고 있는지 또는 가비지 수집 된 것인지 확인하는 방법이 필요합니다.
개체에 대한 참조를 사용하려는 시도는 개체를 사용하게 만듭니다. 그럼 내가 어떻게 할 수 있니?개체가 현재 응용 프로그램에서 사용되고 있거나 가비지 수집 된 적이 있는지 런타임에서 확인하는 방법?

+2

아마 '[WeakReference'] (http://msdn.microsoft.com/en-us/library/system.weakreference.aspx)를 사용해야합니다. – Oded

+0

이전에는'WeakReference'를 사용하지 않았지만 그것이 내가 찾고있는 것이라고 생각합니다. 감사. – atiyar

답변

3

글쎄, WeakReference을 유지할 수 있습니다. 그러면 가비지 수집이 중단되지 않으며 IsAlive으로 "활성"을 확인할 수 있습니다.

이런 종류의 일이 필요하다면 일반적으로 약간의 디자인 냄새가납니다. 이 수표를 수행해야합니까?

+0

GC가 개체를 뿌리 뽑고 수집하지 못하도록하는 다른 참조가있는 경우이를 수행하는 유일한 방법입니다. –

+0

@PeterRitchie : 가능한 다른 옵션은 처리기가있는 이벤트를 발생시킨 종료자를 갖는 것입니다. 그래도 그것은 더 비쌀 것이다. –

+0

그리고 아무도 객체에'GC.SuppressFinalize'를 호출하지 않기를 바랍니다 ... –