종료된 개체가 메모리에 상주하고 사용되지 않으면 많은 시스템 리소스를 차지하므로 .net 가비지 수집기는 해당 개체를 중단 대기열에 넣습니다. 그러나 이 메커니즘을 사용하면 리소스를 많이 소모하는 거대한 클래스를 개체 풀에 넣고 프로그램의 전체 수명 동안 이를 재사용할 수 있습니다(종료 표시는 clr이 해당 클래스에 루트가 없다고 생각한다는 것입니다). 해당 신청 절차). 우리는 이러한 거대한 클래스를 Expensive 개체라고 부릅니다. Expensive 개체를 관리하는 개체 풀의 구조에 대해 논의해 보겠습니다.
Class Expensive{
정적 스택 풀 = new Stack();
공용 정적 비싼 GetObjectFromPool(){
Retun (비싼) pool.Pop()
}
Public static void ShutdownThePool(){
Pool = null;
}
Public Expensive(){
//먼저 Pool.push(this)
개체를 구성합니다
.}
Finalize(){
If(pool!=null){
GC.RegisterForFinally(this;) / /먼저 그를 깨워 죽인다
Pool.push(this) //객체 풀에 "awake" 객체를 추가하고 그를 다시 살려낸다
}
}
}
Class app{
Static void main(){
New 비싼();
......
Expensive e = Expensiv.GetObjectFromPool();
//아래에서 e를 사용할 수 있습니다
.Expensive.shutdownThepool();//애플리케이션을 닫기 전에 개체 풀을 닫습니다. 그렇지 않으면 Finalize가 다시 작성되었기 때문에 메모리에 "구멍"이 남게 됩니다.
}
}