.net回收机制的使用

一个被终止的对象常驻内存重而不被使用的话,会占用很多系统资源,于是.net的垃圾回收器就会将它放在中止化队列中,一旦时机成熟,该对象就会被唤醒,并调用他的finalize方法,来彻底的终结他,但是利用这一机制,就可以将耗费资源的巨型类放入到一个对象池中,
在程序的整个生存期内重复的使用他(结束的标志是clr认为在进程中不存在任何该应用程序的根)。我们称这些巨型类为Expensive对象,下面来讨论一下管理Expensive对象的对象池的结构。
  Class Expensive{

  Static Stack pool = new Stack();



  Public static Expensive GetObjectFromPool(){

  Retun (Expensive) pool.Pop();

  }



  Public static void ShutdownThePool(){

  Pool = null;

  }

  Public Expensive(){

  //先构造对象

  Pool.push(this);

  }

  Finalize (){

  If(pool!=null){

  GC.RegisterForFinally(this;)//先把他叫醒挨宰

  Pool.push(this);//将“清醒的”对象加入到对象池中,让他起死回生

  }

  }

  }



  Class app{

  Static void main(){

  New expensive();

  ……

  Expensive e = Expensiv. GetObjectFromPool();

  //下面就可以使用e了

  Expensive.shutdownThepool();//关闭应用程序前,先关闭对象池,否则会在内存中留下“孔洞”,因为Finalize已经被重写了

  }

  } 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值