정적 소멸자
C #에는 일부 초기화를 수행하는 정적 생성자가 있습니다. (관리되지 않는 리소스 초기화를 할 수 있습니다) 정적 destuctor가 있는지 궁금합니다.
아니, 없습니다.
정적 소멸자는 프로세스 실행이 끝날 때 실행됩니다. 프로세스가 종료되면 이와 관련된 모든 메모리 / 핸들이 운영 체제에 의해 해제됩니다.
프로그램이 실행이 끝날 때 특정 작업 (예 : 트랜잭션 데이터베이스 엔진, 캐시 플러시)을 수행해야하는 경우 정상적인 실행이 끝날 때 실행되는 코드보다 올바르게 처리하기가 훨씬 더 어려울 것입니다. 과정. 충돌 및 예기치 않은 프로세스 종료를 수동으로 처리하고 어쨌든 다음 실행시 복구를 시도해야합니다. "정적 소멸자"개념은 그다지 도움이되지 않습니다.
정확히 소멸자는 아니지만 다음과 같이 할 수 있습니다.
class StaticClass
{
static StaticClass() {
AppDomain.CurrentDomain.ProcessExit +=
StaticClass_Dtor;
}
static void StaticClass_Dtor(object sender, EventArgs e) {
// clean it up
}
}
이것이 가장 좋은 방법입니다 (ref : https://stackoverflow.com/a/256278/372666 )
public static class Foo
{
private static readonly Destructor Finalise = new Destructor();
static Foo()
{
// One time only constructor.
}
private sealed class Destructor
{
~Destructor()
{
// One time only destructor.
}
}
}
아니, 없습니다. 당신이 할 수있는 가장 가까운 것은에 이벤트 핸들러 설정되어 DomainUnload
온 이벤트를 AppDomain
하고 거기 정리 작업을 수행합니다.
정적 구현에서 관리되지 않는 리소스를 초기화하고 정리하는 것은 매우 문제가 많고 문제가 발생하기 쉽습니다.
싱글 톤을 사용하지 않고 Finalizer
인스턴스에 대해 구현 (이상적으로는에서 상 속됨 SafeHandle
)
정적 클래스에 대한 소멸자와 같은 것은 없지만 Appdomain.Unloaded
정말로 무언가를해야하는 경우 이벤트 를 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/4364665/static-destructor
'Development Tip' 카테고리의 다른 글
Scala에서 A <: B와 + B의 차이점은 무엇입니까? (0) | 2020.11.12 |
---|---|
virtualenv에서 "matplotlib.pyplot을 plt로 가져 오기"할 수 없습니다. (0) | 2020.11.12 |
iOS에서 자바 스크립트를 사용하여 클립 보드에 복사 (0) | 2020.11.12 |
npm 오류! (0) | 2020.11.12 |
XML을 생성하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.12 |