Wenn sich ein beendetes Objekt im Speicher befindet und nicht verwendet wird, belegt es viele Systemressourcen, sodass der .net-Garbage Collector es in die Abbruchwarteschlange stellt. Sobald der richtige Zeitpunkt gekommen ist, wird das Objekt aktiviert und aufgerufen finalize-Methode, um es vollständig zu beenden. Mit diesem Mechanismus können Sie jedoch die ressourcenintensive Riesenklasse in einen Objektpool einfügen und sie während der gesamten Lebensdauer des Programms wiederverwenden (Endmarkierung bedeutet, dass der clr davon ausgeht, dass kein Root vorhanden ist). Verfahren für diesen Antrag). Wir nennen diese riesigen Klassen teure Objekte. Lassen Sie uns die Struktur des Objektpools diskutieren, der teure Objekte verwaltet.
Klasse Expensive{
Static Stack pool = new Stack();
Public static Expensive GetObjectFromPool(){
Retun (Expensive) pool.Pop(
}
Public static void ShutdownThePool(){
Pool = null;
Public
Expensive(){
//Erstelle das Objekt
Pool.push(this) first;
}
Finalize (){
If(pool!=null){
GC.RegisterForFinally(this;) //Weck ihn zuerst auf und töte ihn
Pool.push(this); //Füge das „wach“-Objekt zum Objektpool hinzu und erwecke ihn wieder zum Leben
}
}
}
Klasse app{
Static void main(){
New teuer();
......
Expensive e = Expensiv();
//Sie können e unten verwenden.Expensive.shutdownThepool
();//Bevor Sie die Anwendung schließen, Schließen Sie den Objektpool, sonst entsteht ein „Loch“ im Speicher, da Finalize neu geschrieben wurde
}
}