終了したオブジェクトがメモリ内に存在し、使用されない場合、多くのシステム リソースが占有されるため、.net ガベージ コレクタは、適切なタイミングでオブジェクトを起動し、そのオブジェクトを呼び出します。ただし、このメカニズムを使用すると、リソースを消費する巨大なクラスをオブジェクト プールに配置し、プログラムの存続期間全体を通じて再利用できます (終了マークは、clr がルートが存在しないと判断することを意味します)。そのアプリケーションのプロセス)。これらの巨大なクラスを Expensive オブジェクトと呼びます。Expensive オブジェクトを管理するオブジェクト プールの構造について説明します。
クラス Expensive{
静的スタック プール = 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(){
NewPrice();
......
Expensive e = Expensiv.Expensive.shutdownThepool
(
); //アプリケーションを閉じる前に、オブジェクト プールを閉じます。そうしないと、Finalize が書き換えられているため、メモリに「穴」が残ります。
}
}