Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->ASP.NET ->正文

.net回收机制的使用

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-04 点击: [收藏] [投稿]

    一个被终止的对象常驻内存重而不被使用的话,会占用很多系统资源,于是.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已经被重写了

}

}



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:ASP.NET中使用Apache log4net   下一篇:.NET在SQL Server中的图片存取技术

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号