默認對象實例化後得到的都是強引用,不過有些時候對於一些複雜的大對象,出於性能考慮,并不希望進行頻繁的初始化,此時弱引用就可以派上用場。
用法:先用WeakReference包裝複雜對象,到需要該複雜對象的時候,檢查一下弱引用的IsAlive屬性,如果true,就可以通過Target直接得到複雜對象,省去了實例化的過程。
簡單的例子:
static void Main(string[] args)
{
var weakRef = GetWeakRef();
GC.Collect();
if (weakRef.IsAlive)
{
var obj = weakRef.Target as ComplexObject;
Console.WriteLine(obj);
}
else
{
Console.WriteLine("Reference is not available.");
}
Console.Read();
}
private static WeakReference GetWeakRef()
{
return new WeakReference(new ComplexObject());
}
本例中如果調用了GC回收,輸出爲
Reference is not available.
如果不調用GC回收,輸出爲
ConsoleApplication1.ComplexObject