动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   .Net → 阅读文章

 .net回收机制的使用

作者来源: 
阅读 1141 人次 , 2006-4-26 9:46:00 


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

  }

  }
  
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:用VS2005实现ASP.NET2.0移动开发
· 下一篇:ASP.NET页面下载程序
· ASP.NET设计控件净化网站语言
· 在ASP.NET数据集中浏览多个相关表
· ASP.NET Datagrid创建自定义列
· 一个FTP客户端的C#代码
· 给上次的DataGrid分页增加些功能!


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077