Se um objeto finalizado residir na memória e não for usado, ele ocupará muitos recursos do sistema, então o coletor de lixo .net o colocará na fila de aborto. Quando chegar a hora certa, o objeto será despertado e chamará seu. finalize para encerrá-lo completamente. No entanto, usando esse mecanismo, você pode colocar a classe gigante que consome recursos em um pool de objetos e reutilizá-la durante toda a vida útil do programa (a marca final é que o clr pensa que não há raiz no programa). processo para esse aplicativo). Chamamos essas classes gigantes de objetos Expensive. Vamos discutir a estrutura do conjunto de objetos que gerencia objetos Expensive.
Classe Caro{
Static Stack pool = new Stack();
Public static Expensive GetObjectFromPool(){
Retun (Caro) pool.Pop()
}
;
Public static void ShutdownThePool(){
Pool
=
null
}
Public Expensive(){
//Construa o objeto
Pool.push(this
) primeiro
;
//Primeiro acorde-o e mate-o
Pool.push(this); //Adicione o objeto "acordado" ao pool de objetos e traga-o de volta à vida
}
}
}
Class app{
Static void main(){
New caros();
...
Caro e = GetObjectFromPool(
)
; feche o pool de objetos, caso contrário deixará um "buraco" na memória, pois Finalize foi reescrito
}
}