1

.NETのWeakReference実装には、IsAliveプロパティがあります。

1)プロパティを使用することと、プロパティがnullでないIsAliveかどうかをテストすることの間に、パフォーマンス/動作の違いはありますか?Target

2)IsAlive冗長なプロパティですか?

ありがとう。

4

3 に答える 3

3

1)いいえ。内部的には、IsAliveは、ターゲットをチェックし、それがnullかどうかを確認するのとほぼ同じロジックを実行しています。

2)やや、ref.Target != nullとかなり同等かどうかを確認しているのでref.IsAlive。ただし、IsAliveより表現力があり、コードを保守するときに理解しやすくなる可能性があります。

于 2009-10-21T01:52:20.913 に答える
3

ソースコードを見ると、動作に違いはありません。 obj.IsAliveより便利で読みやすいobj.Target != nullです。

于 2009-10-21T01:53:07.867 に答える
0

オブジェクトへの参照を一時的に保持することで、そのオブジェクトが次のGCで存続する可能性がかなり高くなる同時ガベージコレクションシステムを想像するのは難しいことではありません(.Netでは、そうする可能性は比較的低いです)。 )。このようなシステムでは、オブジェクトのTargetプロパティを使用して、オブジェクトが死んでいるかどうかを判断すると、オブジェクトを必要以上に長く存続させるという厄介な副作用が発生する可能性があります。IsAliveプロパティを使用すると、そのリスクを回避できます。

IsAliveは、オブジェクトが死んでいるかどうかを判断するためにのみ確実に使用できることに注意してください。オブジェクトが生きていると報告された場合、そのターゲットを取得できる場合とできない場合があります。

于 2011-02-19T00:14:36.570 に答える