Si un objeto terminado reside en la memoria y no se utiliza, ocupará muchos recursos del sistema, por lo que el recolector de basura .net lo colocará en la cola de abortos. Una vez que sea el momento adecuado, el objeto se despertará y lo llamará. método finalize para terminarlo por completo. Sin embargo, al utilizar este mecanismo, puede colocar la clase gigante que consume recursos en un grupo de objetos y reutilizarla durante toda la vida útil del programa (la marca final es que clr cree que no hay raíz en el archivo). proceso para esa solicitud). A estas clases gigantes las llamamos objetos caros. Analicemos la estructura del grupo de objetos que gestiona los objetos caros.
Clase costosa{
grupo de pila estática = nueva pila();
Público estático Caro GetObjectFromPool(){
Retun (Caro) pool.Pop()
;
Public static void ShutdownThePool(){
Pool = null
}
Public Expensive(){
//Construye el objeto
Pool.push(this) primero
}
Finalize (){
If(pool!=null){
GC.RegisterForFinally(this;) //Primero despiértalo y mátalo
Pool.push(this); //Agrega el objeto "despierto" al grupo de objetos y devuélvelo a la vida
}
}
}
Aplicación de clase{
Static void main(){
New costosa();
Caro
e = Expensiv.
// Puedes usar e a continuación.Expensive.shutdownThepool
();//Antes de cerrar la aplicación, cierre el grupo de objetos; de lo contrario, dejará un "agujero" en la memoria, porque Finalizar se ha reescrito
}
}