1

MSDN:

弱参照は、大量のメモリを使用するオブジェクトに役立ちますが、ガベージコレクションによって再利用されると、簡単に再作成できます。

弱参照を使用する場合でも、アプリケーションはオブジェクトへの強参照を取得できるため、オブジェクトが収集されません。ただし、強力な参照が再確立される前に、ガベージコレクタが最初にオブジェクトに到達するリスクは常にあります。

私の質問は、WeakReferenceオブジェクトを簡単に再作成できるのはなぜですか?GCがリリースした後、通常のオブジェクトと比較して簡単に再作成できますか?

4

3 に答える 3

5

あなたはテキストを読み間違えています。それが言うとき

弱参照は、大量のメモリを使用するオブジェクトに役立ちますが、ガベージコレクションによって再利用されると、簡単に再作成できます。

その意味は

もしも

大量のメモリを使用するオブジェクトがありますが、簡単に再作成できます

それから

このオブジェクトへの弱参照が役立つ可能性があります

于 2012-08-23T09:39:59.740 に答える
3

違いはありません。MSDNドキュメントは弱参照の使用例を説明しようとしています。つまり、弱参照は、大量のメモリを使用するオブジェクトに関連付けて使用する必要がありますが、同時に簡単に再作成できます。

弱参照はオブジェクトのガベージコレクションを妨げないため、大量のメモリを保持しているオブジェクトを収集して、メモリを再利用できるようにすることができます。ただし、収集されたオブジェクトが弱参照を使用する利点を再現するのに費用がかかる場合、オブジェクトをガベージコレクションすることは、オブジェクトを使用するときに失われ、オブジェクトが収集されたために再作成が必要になります。

于 2012-08-23T09:35:34.760 に答える
0

弱参照の主な正しい使用法は、参照が有用である可能性が高いかどうかの決定要因が、他の誰かが同じものへの参照を保持しているかどうかである場合です。このような状況の2つの一般的な例:

  1. オブジェクトFooは、*他のオブジェクトの利益のために*何らかの方法でBarを更新または操作することが予想される場合、Barへの弱参照を保持する可能性がありますが、Barが更新されるかどうかを誰も気にしない場合は、すぐに気になりません。Barを本当に気にするオブジェクトが強参照を保持し、それを気にしないオブジェクトが弱参照を保持する場合、誰もBarを気にしないと、収集の対象になり、弱参照は無効になり、オブジェクトは無効になります。そのような参照を保持している場合は、Barを処理する必要がなくなったことがわかります。
  2. オブジェクトが大きな不変オブジェクトを構築し、それがすでに参照が存在するオブジェクトと正確に一致することを発見した場合、新しく構築されたオブジェクトを破棄し、後者のオブジェクトへの参照を置き換えることが役立つ場合があります。これにより、メモリが節約され、比較が大幅に高速化される可能性があります(2つの異なる大きなオブジェクトを比較すると、コストがかかる場合がありますが、同じ大きなオブジェクトに対する2つの参照を比較するのは非常に安価です)。他の誰かがとにかくそれを必要とする限り、大きなオブジェクトへの参照をキャッシュすることは役に立ちますが、他の参照が存在しないときにオブジェクトをキャッシュに保持することは実際には逆効果になります(キャッシュされたコピーへの参照を他に保持していない場合は、キャッシュされたコピーを破棄して新しいコピーを保持するのと比較して、新しいコピーを破棄してキャッシュされたコピーを保持することには、ほとんどまたはまったく利点がありません。

を使用するかどうかを決定する際には、ターゲットへの他の参照が存在しない瞬間にが無効になったWeakReference場合に満足するかどうかを決定する必要があります。しばらくの間有効なままにしてWeakReferenceおきたい場合は、おそらく他のキャッシュメカニズムを使用する必要があることを示しています。WeakReference

于 2012-10-11T22:18:41.927 に答える