소멸자, 폐기 및 종료 방법의 차이점
C #에서 가비지 수집기가 어떻게 작동하는지 연구하고 있습니다. Destructor
, Dispose
및 Finalize
메서드 사용에 대해 혼란 스럽습니다 .
내 연구와 이해에 따라 클래스 내에 Destructor 메서드를 사용하면 클래스의 인스턴스에서 명시 적으로 호출 할 수없는 소멸자 메서드에서 언급 한 방식으로 가비지 수집을 수행하도록 가비지 수집기에 지시 할 수 있습니다.
이 Dispose
메서드는 사용자가 가비지 컬렉션을 제어 할 수 있도록합니다. 이 Finalize
메서드는 개체 자체가 아닌 클래스에서 사용하는 리소스를 해제합니다.
나는 그것을 올바른 방법으로 이해하는지 잘 모르겠습니다. 의심을 명확히 해주세요. 추가 링크 또는 가이드를 환영합니다.
소멸자는 Finalize 메서드를 암시 적으로 호출하며 기술적으로 동일합니다. Dispose는 IDisposable 인터페이스를 구현하는 개체와 함께 사용할 수 있습니다.
당신은 볼 수 있습니다 : 소멸자 C #-MSDN
소멸자는 개체의 기본 클래스에서 Finalize를 암시 적으로 호출합니다.
동일한 링크의 예 :
class Car
{
~Car() // destructor
{
// cleanup statements...
}
}
소멸자 코드는 암시 적으로 다음 코드로 변환됩니다.
protected override void Finalize()
{
try
{
// Cleanup statements...
}
finally
{
base.Finalize();
}
}
소멸자에 대한 이해가 옳습니다.
에서 MSDN
프로그래머는이 가비지 컬렉터에 의해 결정되기 때문에 소멸자가 호출 될 때 제어하지 않는다 . 가비지 수집기는 응용 프로그램에서 더 이상 사용하지 않는 개체를 확인합니다. 객체가 소멸 될 수 있다고 생각하면 소멸자를 호출하고 (있는 경우) 객체를 저장하는 데 사용 된 메모리를 회수합니다. 프로그램이 종료 될 때도 소멸자가 호출됩니다. Collect를 호출하여 가비지 수집을 강제 할 수 있지만 대부분의 경우 성능 문제를 일으킬 수 있으므로 피해야합니다.
C # 용어에서 소멸자와 종료자는 기본적으로 상호 교환 가능한 개념이며, 유형이 수집 될 때 관리되지 않는 리소스 (예 : 외부 핸들) 를 해제하는 데 사용해야 합니다. 종료 자를 작성해야하는 경우 는 매우 드뭅니다.
그 문제는 GC가 비 결정적이라는 것입니다. 따라서 Dispose()
방법 (via IDisposable
)은 결정 론적 정리 를 지원할 수 있습니다 . 이것은 가비지 수집과 관련이 없으며 호출자가 모든 리소스를 더 빨리 해제 할 수 있도록합니다 . 또한 사용하기에 적합하다 관리 당신이하는 유형이있는 경우, 예를 들어, (관리되지 않는 이외에) 자원 캡슐화 (말) 데이터베이스 연결, 당신은 너무 연결을 해제 유형을 폐기 할 수도 있습니다.
'developer tip' 카테고리의 다른 글
원격 저장소에서 분기의 새 사본을 얻는 방법은 무엇입니까? (0) | 2020.11.28 |
---|---|
int 배열 선언 (0) | 2020.11.28 |
Xcode는 메인 스토리 보드를 어떻게로드합니까? (0) | 2020.11.28 |
스레드 "main"java.lang.NoClassDefFoundError의 예외 : junit / textui / ResultPrinter (0) | 2020.11.28 |
ID 열이있는 가져 오기 및 내보내기 마법사 (0) | 2020.11.27 |