8

弱参照は潜在的に大きなデータセットをメモ化するのに適した候補であることを知っています。弱参照に関するWikipediaの記事には、「アプリケーションで参照されている現在の変数を追跡する」と「弱参照の別の使用法は書面で」という記述しか記載されていません。キャッシュ」。

弱参照の使用がAGoodIdea TMである他のいくつかの状況(単なる「結果のキャッシュ」よりも具体的)は何ですか?

4

4 に答える 4

2

弱い参照の主な正しい使用法は、その重要性がそれらへの強い参照の存在に由来するものを識別することです。最も一般的な 2 つのシナリオは次のいずれかです。

  • オブジェクトが何かへの参照を保持するのは、オブジェクトが問題のオブジェクトを「気にする」からではなく、オブジェクトを気にする他のエンティティがそれに対して何かをしたいからです。しばらくして誰もオブジェクトを気にしなくなった場合、他のエンティティが「それを気にかけているすべてのエンティティ」に代わってオブジェクトを操作し続ける理由はありません。

  • 同じ不変オブジェクトへの多くの参照を保持するメモリ コストは、多くの同一オブジェクトへの参照を保持するメモリ コストよりもはるかに低く、同じオブジェクトへの参照の比較は、同一オブジェクトの比較よりもはるかに高速です。不変オブジェクトの作成、破棄、収集、および同一オブジェクトの作成のメモリ コストは、オブジェクトを作成し、後でそのオブジェクトへの 2 番目の参照を返すコストと本質的に同じです。とにかく保持する必要がある既存のオブジェクトへの参照を返す大きな勝利です。コレクションの対象であり、まだ収集されていないオブジェクトへの参照を返すことは、成功する場合とそうでない場合があります (通常はわずかな勝利ですが、世代別 GC では、パフォーマンスがわずかに低下することがあります)。多くの場合、後者の利点は、オブジェクトを必要以上に長く存続させることを正当化するのに十分ではありません。

于 2014-11-12T17:41:04.047 に答える
1

Flexでは、弱い参照を使用してメモリリークを回避します

イベントハンドラーが短命のインスタンスオブジェクトのメンバーである場合、より長く存続するオブジェクトへの強力な参照としてハンドラーを渡すと、短命のインスタンスが不必要に存続する可能性があります。

于 2009-09-16T17:26:17.157 に答える
1

いくつかのことに弱参照を使用します...

オブザーバブルがオブザーバブルを長く存続させないようにするために、.Netで「ウィークイベント」を作成するのが好きです。

また、メモリリークを検出するために弱いイベントを使用しました。

于 2009-09-16T17:30:31.500 に答える
0

Python では、ガベージ コレクターは参照カウントを使用して、いつオブジェクトを "破棄" または解放するかを決定します。通常の循環参照では、参照カウントがそれぞれ 1 以上のままであるため、オブジェクトがガベージ コレクションされることはありません。ただし、弱い参照を使用すると、オブジェクトが範囲外になったときに、両方/すべてのオブジェクトを適切にクリーンアップできます。

于 2009-09-26T20:57:47.220 に答える