このドキュメントはアーカイブされており、メンテナンスされていません。

WeakReference クラス

"弱い参照" を表します。弱い参照は、オブジェクトがガベージ コレクションの対象になっている状態のままで、そのオブジェクトを参照します。

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class WeakReference : ISerializable
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class WeakReference implements ISerializable
SerializableAttribute 
ComVisibleAttribute(true) 
public class WeakReference implements ISerializable

共通言語ランタイムのガベージ コレクションの機構は、アクセスできないオブジェクトをメモリからクリアします。オブジェクトの参照が null 参照 (Visual Basic では Nothing) に設定された場合など、直接、間接を問わずオブジェクトへのすべての参照が無効になると、そのオブジェクトにはアクセスできなくなります。アクセス可能なオブジェクトへの参照は、"強い参照" と呼ばれます。

弱い参照でも、アクセス可能なオブジェクトを参照します。このようなオブジェクトはターゲットと呼ばれます。ユーザーがターゲットへの強い参照を作成するには、Target プロパティの値を変数に割り当てます。ただし、強い参照で参照されないターゲットは、弱い参照で参照されていてもガベージ コレクションの対象になります。

オブジェクトがガベージ コレクションの対象になる時点と、このオブジェクトが収集される時点との間に遅延が生じることがあります。ターゲットの収集後に、ユーザーがそのターゲットを取得しようとした場合、null 参照だけが取得されます。ターゲットがまだ収集されていない場合には、有効な参照を取得できます。

Finalize メソッドが存在し、さらにこのメソッドを呼び出すように指示されている場合には、ガベージ コレクションは、オブジェクトに対してこのメソッドを呼び出します。つまり、終了処理が実行されます。終了処理が完了した後に、ユーザーが現在の WeakReference オブジェクトの IsAlive プロパティまたは Target プロパティを使用してオブジェクトにアクセスしようとすると、InvalidOperationException がスローされます。

用語

オブジェクトとガベージ コレクションを記述する際に使用するいくつかの専門用語を知っておくと役立ちます。アクセス可能で使用できるオブジェクトは、生きている状態のオブジェクトです。未使用でガベージ コレクションの対象となるオブジェクトは、死んでいる状態のオブジェクトです。死んでいる状態のオブジェクトへの強い参照が取得されると、そのオブジェクトは再び生きている状態になります。このオブジェクトは再生したことになります。

WeakReference オブジェクトは、終了後にターゲットへの参照を維持するかどうか、つまり、弱い参照によりターゲットの再生を追跡するかどうかを指定できます。再生を追跡しない弱い参照は、"短い弱い参照" と呼ばれます。再生を追跡する弱い参照は、"長い弱い参照" と呼ばれます。

パフォーマンスに関する考慮事項

WeakReference オブジェクトのキャッシュに、アプリケーションで使用されるオブジェクトのセットへの参照が維持されるコード例で、WeakReference クラスがよく使用されます。たとえば、オブジェクトがスコープ外であるために死んだ状態になった場合でも、ガベージ コレクション機構は割り当てられたメモリをクリアできます。

この例を使用して優れたメモリ管理スキームについて説明した場合、誤解を招く可能性があります。WeakReference クラスをメモリ管理の問題に対する自動的な解決策として扱うことができないためです。キャッシュで保有または削除するエントリについて、アプリケーションの規則、つまりキャッシュ ポリシーを確立する必要があります。

System.Object
  System.WeakReference

この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。

.NET Framework

サポート対象 : 2.0、1.1、1.0

.NET Compact Framework

サポート対象 : 2.0、1.0
表示: