私はGCHandle.Alloc(Object)の契約を厳密に理解したいと思います。GCHandle.Alloc(Object)の契約は正確には何ですか?
私が呼び出した場合というのドキュメントから理解:
gc.Free();
私も場合はfooが収集されますことを理解:
GCHandle gc = GCHandle.Alloc(foo);
私が呼ぶまでfooはゴミが収集されないことが保証されますAppDomainがアンロードされます。
私がチェックしたいのは、Freeを呼び出さずに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を使用する必要はありません。オブジェクトへの静的参照を作成するだけです。参照がクリアされない限り収集されません。 –
@Jim正に、私の理解を明確にすることを正直に頼んでいます - 私はアプリケーションドメインの長いライフサイクルを計画していません(私は代表者がアンマネージドコードのコールバックとしてラップして安全なライフサイクルを見ています。 。 – morechilli