GCHandle.Alloc (Object) 계약을 엄격하게 이해하고 싶습니다. 나는 또한 그 foo는 이해 GCHandle.Alloc (Object) 계약은 정확히 무엇입니까?
gc.Free();
이 경우 수집 얻을 것이다 : 나는 호출 할 때까지
GCHandle gc = GCHandle.Alloc(foo);
foo는 쓰레기 수집되지 않도록 보장됩니다
은 내가 호출하면 그 문서에서 이해 AppDomain이 언로드됩니다.
무료로 호출하지 않고 Alloc에 대한 호출이 사실상 (GC의 관점에서) 루트 참조와 같은지 확인하고 싶습니다.
이것이 사실이라면 GCHandle 변수 gc의 범위는 foo의 수명에 영향을주지 않습니다. Free가 호출되지 않으면 AppDomain이 언로드 될 때까지 foo가 실행됩니다.
예. 개체가 Alloc을 호출하고 GCHandle 인스턴스를 유지하지 않으면 AppDomain이 언로드 될 때까지 계속 실행됩니다.
이 정보가 맞습니까?
일부 참조 :
http://msdn.microsoft.com/en-us/library/a95009h1.aspx
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.gchandle.free.aspx
http://blogs.msdn.com/b/clyon/archive/2005/03/18/398795.aspx
누군가이 행동을 이용하려고하는 이유는 무엇입니까? –
많은 사람들이 이미 있습니다. 이것은 싱글 톤 패턴이라고 불리며, GCHandle을 사용하지 않아도됩니다. 단순히 객체에 대한 정적 참조를 작성하십시오. 참조가 해제되지 않는 한 수집되지 않습니다. –
@ 짐 솔직히 말해서 이해를 명확히 해줄 것을 부탁합니다. 앱 도메인의 긴 라이프 사이클을 계획하고 있지 않습니다. (대표자가 관리되지 않는 코드의 콜백으로 싸서이 설명이 유용하다고 생각한 안전한 라이프 사이클을보고 있습니다) . – morechilli