質問

MarshalbyRefobjectから別のAppDomainに継承するオブジェクトを渡すと、オブジェクトを収集したAppDomainによって誘導されるGC.COLLECT()は、GC.COLLECTまでにオブジェクトがどちらのAppDomainに根付いていない場合()、gc.collect()はしません() )電話?

私が根付いていないと言うとき、私は開発者の書面によるコードアクセスがもうないことを意味します。

オブジェクトが収集されていないのではなく、次世代に昇格しているようです!

しかし、オブジェクトをdiff appdomainに渡すのを停止すると、予想どおりに収集されます。

この動作は設計によるものですか?もしそうなら、理論的根拠?

みんなありがとう、

PSコード内のGC.COLLECT()は多くの理由で悪いことを知っています。MBROSでGCがどのように発生するかを理解しようとしています。

役に立ちましたか?

解決

あなたが述べたように、MbroオブジェクトはGCの追跡を維持するのが難しいです。したがって、MSは彼らの行動を少し異なって実装しました。
これらのオブジェクトには、初期寿命(5分間)とRenewOnCalltime(2分)の2つのプロパティがあります。 Mbroオブジェクトが作成された場合、初期寿命があります。この時間がゼロになると、GCにマークされます。
オブジェクトのすべての呼び出しにより、オブジェクトはregningOnCalltimeの長くするためにライブを行うことができます(残りの寿命がinledincalltimeよりも少ない場合)。

例の場合(初期寿命5分、2分更新時間):
オブジェクトが作成されます:寿命は5分です。
4分通過。生涯は1分です。
オブジェクトへの呼び出しが行われます。生涯は2分です。
2分通過。
オブジェクトはGCにマークされており、寿命は残っていません。

MSDNのどこかに、これに関する素晴らしい記事があります(今は見つかりません:/)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top