zoukankan      html  css  js  c++  java
  • C# WeakReference(弱引用)

    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中的计数有点类似 因为一个对像可能存在交叉占用资源的情况
    如果强制立刻回收,需要额外理那些与资源的连接关系,而且这些关系又可能形成再引用,造成递归。
    所以干脆点,集中一个时间,共同消灭。
  • 相关阅读:
    控件右键菜单的实现以及选中后勾选
    DataGridView控件使用
    return,continue,break的区别
    break和continue的区别 循环终止办法
    事件
    跨线程改变控件属性 线程调用带参数方法
    XML配置文件相关
    抽象类及与接口的区别
    字典
    Oracle学习第一天
  • 原文地址:https://www.cnblogs.com/sekon/p/3556930.html
Copyright © 2011-2022 走看看