博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#WeakReference弱引用
阅读量:6623 次
发布时间:2019-06-25

本文共 1000 字,大约阅读时间需要 3 分钟。

原文:

 

弱引用:在引用对象的同时,允许垃圾回收该对象。

.NET中提供了WeakReference对象来实现这个功能。

对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,

同时希望GC必要时回收时,可以考虑使用弱引用。弱引用使用起来很简单,

 

WeakReference w = new WeakReference(xml);//创建若引用对象

if (w.IsAlive)//判断是否已被垃圾回收
{
XmlDocument xml1 = w.Target as XmlDocument;//转换为指定的对象类型给你

}

 

WeakReference的构造函数有两个重载。

下面的这些话是引用别人的微博,因为自身不太理解,就不多述。

原文出自:http://www.cnblogs.com/jeekun/archive/2011/10/09/2203712.html

前面的文章中我提到过需要Finalize的对象在最终释放前会有一 次复活,我们大概可以猜到第二个参数表示的意思了。如果我们第二个参数给false,这个弱引用就是一个short weak reference(短弱引用),当GC回收时,发现没有这个对象的引用了,就认为这个对象无用,这时短弱引用对这个对象的跟踪到此为止,弱引用的 Target被设置为null。前面的一个参数的构造函数版本新建的弱引用为短弱引用。如果第二个参数给true,这个弱引用就是一个long weak reference(长弱引用)。在对象的Finalize方法没有被执行以前,Target都可用。不过这是对象的某些成员变量也许已经被回收,所以使 用起来要想当小心。

现在让我们看看WeakReference是如何实现的。很显然WeakReference不能直接的引用目标对象,WeakReference的 Target属性的get/set是两个函数,从某处查到目标对象的引用返回,而不是我们最常用写的那样直接返回或者设置一个私有变量。GC维护了两个列 表来跟踪两种弱引用的目标对象,在一个 WeakReference对象创建时,它在相应的列表中找到一个位置,将目标对象的引用放入,很显然,这两个列表不是根的一部分。在GC进行内存回收的 时候,如果要回收某一个对象,会检查弱引用的列表,如果保存着这个对象的引用,则将其设为null。 

你可能感兴趣的文章
H.264学习笔记之一(层次结构,NAL,SPS)
查看>>
5G时代的无线宽带新技术
查看>>
风控模型共享如何打掉黑产?
查看>>
Radware:IP欺诈等让网络攻击难以防范
查看>>
基于Token认证的WebSocket连接
查看>>
【Solidity】2.合约的结构体 - 深入理解Solidity
查看>>
同学们,告诉你们信息中心,如何保持看直播不卡的姿势!
查看>>
《Drupal实战》——2.6 小结
查看>>
《C语言及程序设计》实践参考——二分法解方程
查看>>
java thread中的wait()和notify()
查看>>
2016最新搜索引擎优化(SEO)重点要素
查看>>
当Web访问性能出现问题,如何深探?
查看>>
【IOS-COCOS2D-X 游戏开发之二】【必看篇】总结阐述COCOS2D-X与COCOS2D-IPHONE区别;
查看>>
ExtJs之Ext.core.Element
查看>>
六套 App:构建我的产品设计工作流
查看>>
eoLinker-API_Shop_通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等...
查看>>
因为小程序的scroll-view组件不能下拉刷新我做了个开源项目
查看>>
JavaScript 垃圾回收机制
查看>>
前端面试回忆录 - 滴滴篇 - 凉面
查看>>
jxl导入Excel 切割List 并使用MyBatis批量插入数据库
查看>>