首页 > 编程 > .NET > 正文

.net回收机制的使用

2024-07-10 13:11:10
字体:
来源:转载
供稿:网友
   一个被终止的对象常驻内存重而不被使用的话,会占用很多系统资源,于是.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已经被重写了

}

}

中国最大的web开发资源网站及技术社区,
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表