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中的计数有点类似 因为一个对像可能存在交叉占用资源的情况
如果强制立刻回收,需要额外理那些与资源的连接关系,而且这些关系又可能形成再引用,造成递归。
所以干脆点,集中一个时间,共同消灭。