Si un objet terminé réside en mémoire et n'est pas utilisé, il occupera beaucoup de ressources système, donc le garbage collector .net le mettra dans la file d'attente d'abandon une fois le moment venu, l'objet sera réveillé et l'appellera. finalize pour y mettre fin complètement. Cependant, en utilisant ce mécanisme, vous pouvez placer la classe géante consommatrice de ressources dans un pool d'objets et la réutiliser pendant toute la durée de vie du programme (la marque de fin est que le clr pense qu'il n'y a pas de racine dans le fichier). processus pour cette demande). Nous appelons ces classes géantes des objets chers. Discutons de la structure du pool d'objets qui gère les objets chers.
Classe chère {
Pool de pile statique = new Stack ();
Public statique Cher GetObjectFromPool(){
Retun (Cher) pool.Pop(
}
);
Public static void ShutdownThePool(){
Pool = null;
}
Public Expensive(){
//Construisez d'abord l'objet
Pool.push(this);
}
Finalize (){
If(pool!=null){
GC.RegisterForFinally(this;) // Réveillez-le d'abord et tuez-le
Pool.push(this); //Ajoutez l'objet "éveillé" au pool d'objets et ramenez-le à la vie
}
}
}
Class app{
Static void main(){
New chère();
......
Cher e = Expensiv(
//Vous pouvez utiliser e ci-dessous.Expensive.shutdownThepool
();//Avant de fermer l'application, fermez le pool d'objets, sinon cela laissera un "trou" dans la mémoire, car Finalize a été réécrit
}
}