zoukankan      html  css  js  c++  java
  • .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已经被重写了

      

      }

      

      }

  • 相关阅读:
    网站常见的反爬虫和应对方法
    网站反爬虫
    webmagic的设计机制及原理-如何开发一个Java爬虫
    腾讯社区搜索架构演进
    搜索引擎评估与互联网用户行为建设
    深层网络搜索核心技术研讨
    Solr与Cassandra二级缓存实践
    .NET的前世今生与将来
    技术人生的职场众生相
    爆栈之旅
  • 原文地址:https://www.cnblogs.com/thcjp/p/2684280.html
Copyright © 2011-2022 走看看