.NETのWeakReference実装には、IsAliveプロパティがあります。
1)プロパティを使用することと、プロパティがnullでないIsAlive
かどうかをテストすることの間に、パフォーマンス/動作の違いはありますか?Target
2)IsAlive
冗長なプロパティですか?
ありがとう。
.NETのWeakReference実装には、IsAliveプロパティがあります。
1)プロパティを使用することと、プロパティがnullでないIsAlive
かどうかをテストすることの間に、パフォーマンス/動作の違いはありますか?Target
2)IsAlive
冗長なプロパティですか?
ありがとう。
1)いいえ。内部的には、IsAliveは、ターゲットをチェックし、それがnullかどうかを確認するのとほぼ同じロジックを実行しています。
2)やや、ref.Target != null
とかなり同等かどうかを確認しているのでref.IsAlive
。ただし、IsAlive
より表現力があり、コードを保守するときに理解しやすくなる可能性があります。
ソースコードを見ると、動作に違いはありません。 obj.IsAlive
より便利で読みやすいobj.Target != null
です。
オブジェクトへの参照を一時的に保持することで、そのオブジェクトが次のGCで存続する可能性がかなり高くなる同時ガベージコレクションシステムを想像するのは難しいことではありません(.Netでは、そうする可能性は比較的低いです)。 )。このようなシステムでは、オブジェクトのTargetプロパティを使用して、オブジェクトが死んでいるかどうかを判断すると、オブジェクトを必要以上に長く存続させるという厄介な副作用が発生する可能性があります。IsAliveプロパティを使用すると、そのリスクを回避できます。
IsAliveは、オブジェクトが死んでいるかどうかを判断するためにのみ確実に使用できることに注意してください。オブジェクトが生きていると報告された場合、そのターゲットを取得できる場合とできない場合があります。