.NET 强引用与弱引用
- 强引用
如果应用程序的代码可以访问一个正由该程序使用的对象,垃圾回收器就不能收集该对象, 那么,就认为应用程序对该对象具有强引用。
要建立强引用并重新使用该对象,请将 WeakReference 的 Target 属性强制转换为该对象的类型。如果 Target 属性返回 null,则表示对象已被收集;否则,您可继续使用该对象,因为应用程序已重新获得了对它的强引用。
- 弱引用
弱引用允许应用程序访问对象,同时也允许垃圾回收器收集相应的对象。如果不存在强引用,则弱引用的有限期只限于收集对象前的一个不确定的时间段。
使用弱引用时,应用程序仍可对该对象进行强引用,这样做可防止该对象被收集。但始终存在这样的风险:垃圾回收器在重新建立强引用之前先处理该对象。
要对某个对象建立弱引用,请使用要跟踪的对象的实例创建一个 WeakReference。 然后将 Target 属性设置为该对象,将该对象设置为 null。
-
- 适合弱引用的对象
-
- 占用大量内存,但通过垃圾回收功能回收以后很容易重新创建。
-
- 弱引用分类
-
- Short
-
-
- Long
-
-
- 弱引用使用准则
-
- 仅在必要时使用长弱引用,因为在终止后对象的状态是不可预知的
- 避免对小对象使用弱引用,因为指针本身可能和对象一样大,或者比对象还大
- 不应将弱引用作为内存管理问题的自动解决方案,而应开发一个有效的缓存策略来处理应用程序的对象。