.net中的弱引用

时间:2011-04-22 13:23:29

标签: .net weak-references

有人可以举一些在.net项目中使用弱引用的例子吗?

5 个答案:

答案 0 :(得分:4)

考虑2级缓存。所以第一级中的对象用普通引用引用,然后在第二级引用弱引用。因此,如果你想让你的对象从第一级到期,你可以把它放在第二级。

下次,当客户端尝试访问此对象时,如果有足够的内存对象将从第二级升级,但是如果内存不足并且收集了对象,则必须重新创建对象。有时会从昂贵的商店重新创建或检索,但在某些情况下,您可以在第二级找到它。

答案 1 :(得分:3)

一种情况是您希望对象具有单例行为,但您不希望它通过长期引用永久保留。例如:

class ExpensiveSingleton
{
   private static WeakReference _instanceWeakRef;
   private ExpensiveSingleton() { ... your expensive ctor ... }

   public static ExpensiveSingleton Instance
   {
      get
      {
         ExpensiveSingleton reference = null;

         if(_instanceWeakRef != null)
            reference = _instanceWeakRef.Target as ExpensiveSingleton; // Try a cheap access

         if(reference == null)
         {
             reference = new ExpensiveSingleton(...); // Pay the cost
             _instanceWeakRef = new WeakReference(newInstance);
         }

         return reference;       
      }
   }
}

(为简洁起见,这不是线程安全的)

这确保您获取到该对象的所有强引用都是同一个对象,并且当所有强引用都消失时,最终将收集该对象。

答案 2 :(得分:1)

在msdn页面中有一个很好的例子WeakReference,一个实现缓存的示例代码。

答案 3 :(得分:1)

答案 4 :(得分:1)