roa*_*oul 5 c# garbage-collection weak-references
我知道以下知识:
弱引用允许垃圾收集器收集对象,同时仍允许应用程序访问对象.
因此,如果对象已被回收,则必须在必要时再次创建它.
那么,短弱参考和长弱参考之间有什么区别?我想到它如下:(根据msdn)
简短的弱引用:如果GC回收对象,则该对象确实被释放.
long弱引用:如果GC回收对象,则该对象仍然存在(因为它被缓存).
有人能告诉我更多细节吗?
短
当垃圾收集回收对象时,短弱引用的目标变为null.弱引用本身就是一个托管对象,并且像任何其他托管对象一样受垃圾收集的影响.一个简短的弱引用是WeakReference的默认构造函数.
长
调用对象的Finalize方法后,将保留较长的弱引用.这允许重新创建对象,但对象的状态仍然是不可预测的.要使用长引用,请在WeakReference构造函数中指定true.
如果对象的类型没有Finalize方法,则应用短弱引用功能,并且弱引用仅在收集目标之前有效,这可以在终结器运行后的任何时间发生.
要建立强引用并再次使用该对象,请将WeakReference的Target属性强制转换为对象的类型.如果Target属性返回null,则收集该对象; 否则,您可以继续使用该对象,因为该应用程序已重新获得对它的强引用.
使用弱引用的指南
仅在必要时使用长弱引用,因为在完成后对象的状态是不可预测的.避免对小对象使用弱引用,因为指针本身可能大或大.
避免使用弱引用作为内存管理问题的自动解决方案.相反,开发一个有效的缓存策略来处理应用程序的对象.