短弱参考和长弱参考之间有什么区别?

时间:2013-07-09 08:08:14

标签: c# garbage-collection weak-references

我知道以下知识:

  

弱引用允许垃圾收集器收集对象   同时仍允许应用程序访问该对象。

因此,如果对象已被回收,则必须在必要时再次创建。

然后,短弱参考和长弱参考之间有什么区别?我想到如下:(根据msdn)

  

简短弱引用:如果GC回收对象,则对象确实如此   释放。

     

长弱引用:如果GC回收对象,则对象仍然是   存在(因为它被缓存)。

那么有人可以告诉我更多细节吗?

1 个答案:

答案 0 :(得分:5)

  

<强>短

     

当对象出现时,短弱引用的目标变为null   垃圾收集回收。弱参考本身就是一个   托管对象,并且像任何一样受垃圾收集   其他管理对象。一个简短的弱引用是默认值   WeakReference的构造函数。

     

<强>长

     

在对象的Finalize方法之后保留长弱引用   被称为。这允许重新创建对象,但是状态   对象仍然无法预测。要使用长引用,请指定   在WeakReference构造函数中为true。

     

如果对象的类型没有Finalize方法,则短弱   引用功能适用,弱引用仅有效   直到目标被收集,这可能在任何时候发生   终结者正在运行。

     

要建立一个强引用并再次使用该对象,请投射   将WeakReference的属性定位到对象的类型。如果   Target属性返回null,收集对象;除此以外,   您可以继续使用该对象,因为该应用程序具有   重新获得了强烈的参考。

     

使用弱引用的指南

     

仅在必要时使用长弱引用作为状态   最终确定后,对象无法预测。避免使用弱者   引用小对象,因为指针本身可能很大   或更大。

     

避免使用弱引用作为内存的自动解决方案   管理问题。相反,为...制定有效的缓存策略   处理应用程序的对象。

Reference