程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .net回收機制的使用

.net回收機制的使用

編輯:.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已經被重寫了
  
  }
  
  }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved