C# WeakReference(弱引用)
2024-09-07 09:11:11
WeakReference(弱引用)
我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。
使用上 很简单:
Object obj = new Object();
WeakReference wref = new WeakReference( obj );
obj = null;
使用对象A:
Object obj2 = wref.Target;
if( obj2 != null )
{ // 做你想做的事吧。 }
else
{ // 对象已经被回收,如果要用必须新建一个。 }
GC会有两化回收,但这个具体时间不确定,有算法。 所以 =null 了以后,不能保证对像真的消失。 一般情况下不用去管这个 只有当 占用内存资源过大时,需要马上清理,才会考虑。
两轮回收
一般招收 c#程序员,这题必考。
这个跟 COM中的计数有点类似 因为一个对像可能存在交叉占用资源的情况
如果强制立刻回收,需要额外理那些与资源的连接关系,而且这些关系又可能形成再引用,造成递归。
所以干脆点,集中一个时间,共同消灭。
最新文章
- linux终端指令总结
- 用友NC开发的ListView切换成FormEdit
- layer弹窗监控键盘事件
- UStore-添加自定义工作流(JDF)到产品
- BNUOJ 52325 Increasing or Decreasing 数位dp
- python代码风格-PEP8
- 【转】用 PHP 内置函数 file_put_contents 写入文件
- PHP字符串操作常用函数
- SGU 106 The Equation 扩展欧几里得应用
- SpringMVC批量上传
- 第一个WebAPI项目
- JQuery的$.each(list,function(i,a){} 中 i和a 未定义,a取不到值
- tfs增加用户
- ajax(读取json数据)
- docker 14 dockerfile自定义mycentos
- Centos 为Nginx 搭建https
- spring boot 集成freemarker
- file 选取文件/文件夹
- camunda 开源的bpm系统
- HBase 管理,性能调优
热门文章
- python 获取类中除内置方法外的所有方法名
- Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- C++基础 new和delete
- poj 1759 二分搜索
- 7 定制10MINs首页2
- loadrunner破解出现“license security violation,Operation is not allowed”的错误提示
- 四 Android Capabilities讲解
- freemaker参考地址
- 孤荷凌寒自学python第三十二天python的代码块中的异常的捕获
- crontab-用于设置周期性被执行的指令