占用大量内存,但通过垃圾回收功能回收以后很容易重新创建的对象特别适合使用弱引用。
可以创建短弱引用或长弱引用:
-
Short
垃圾回收功能回收对象后,短弱引用的目标会变为
null
。 弱引用本身是托管对象,与其他任何托管对象一样需要经过垃圾回收。 短弱引用是 WeakReference 的无参数构造函数。 -
Long
在对象的 Finalize 方法已调用后,长弱引用获得保留。 这样,便可以重新创建该对象,但该对象仍保持不可预知的状态。 若要使用长引用,请在 WeakReference 构造函数中指定
true
。如果对象类型不包含 Finalize 方法,应用的是短弱引用功能。弱引用只在目标被收集前有效,运行终结器后可以随时收集目标。
若要建立强引用并重新使用对象,请将 WeakReference 的 Target 属性强制转换为对象类型。 如果 Target 属性返回 null
,表示对象已被收集;否则,可继续使用对象,因为应用已重新获得对它的强引用。
仅在必要时使用长弱引用,因为在终结后对象的状态不可预知。
避免对小对象使用弱引用,因为指针本身可能和对象一样大,或者比对象还大。