반응형
가비지 수집기가 Dispose ()를 호출합니까?
이 질문에 이미 답변이 있습니다.
프로그램이 그렇지 않은 경우 GC가 결국 Dispose를 호출 할 것이라고 생각했지만 프로그램에서 Dispose ()를 호출하여 정리를 결정적으로 만들어야한다고 생각했습니다.
그러나 내 작은 테스트 프로그램에서 Dispose가 호출되는 것을 전혀 보지 못했습니다 ....
public class Test : IDisposable
{
static void Main(string[] args)
{
Test s = new Test();
s = null;
GC.Collect();
Console.ReadLine();
}
public Test()
{
Console.WriteLine("Constructor");
}
public void Dispose()
{
Console.WriteLine("Dispose");
}
}
// 출력은 "생성자"일 뿐이며 예상대로 "Dispose"가 표시되지 않습니다. 뭐야?
편집 : 예, Dispose ()를 호출해야한다는 것을 알고 있습니다. 일회용 개체를 사용할 때 표준 패턴을 따릅니다. 내 질문은 관리되는 C ++ (다른 스레드의 좋은 주제가 될 또 다른 복잡성 계층) 인 다른 사람의 코드에서 누수를 추적하려고하기 때문에 발생합니다.
GC는를 호출하지 않고 종료자를 Dispose
호출합니다 (호출해야 함 Dispose(false)
).
측면의 관련 게시물을 보거나 Dispose 패턴에 대한 C # 모범 사례를 찾아보십시오 ( 문서는IDisposable
IIRC를 잘 설명합니다.)
짧은 대답은 "아니오"입니다. 더 자세한 답변은 ".NET 가비지 수집기에 의존하는 것이 나쁜 습관 입니까? " 및 "Dispose ()를 호출하지 않으면 어떻게됩니까 ?" 에 대한 내 대답에서 찾을 수 있습니다.
참고 URL : https://stackoverflow.com/questions/1691846/does-garbage-collector-call-dispose
반응형
'developer tip' 카테고리의 다른 글
SemaphoreSlim의 사용법을 이해해야합니다. (0) | 2020.12.09 |
---|---|
net461이 유일한 프레임 워크로 설정된 ASP.NET Core 웹 애플리케이션 (.NET Core) 사용과 (.NET Framework) 템플릿 사용의 차이점 (0) | 2020.12.09 |
런타임 중에 Rails 구성 값에 어떻게 액세스하나요? (0) | 2020.12.08 |
리버스 엔지니어링으로부터 Android 앱을 보호하는 것이 정말 불가능합니까? (0) | 2020.12.08 |
라텍스 매우 콤팩트 항목 화 (0) | 2020.12.08 |