2010-03-07 2 views
1

C++/CLI에서 래퍼 클래스 Foo을 구현한다고 가정 해 보겠습니다. 당연히 dtor (Foo::~Foo)를 만들면 IDisposable 구현이됩니다."관리되지 않는"메모리를 해제하려면 IDisposable을 구현해야합니까?

IDisposable은 일반적으로 GDI 리소스, 파일 핸들 등 일부 "희소 한"리소스를 즉각적으로 릴리스하는 데 사용됩니다. 그러나 IDisposable이 단순히 메모리를 해제하면 (예 : free 또는 delete) 간단히 수행하면 안됩니다. 정기적 인 파이널 라이저 (Foo::!Foo)에서 그럴 때마다?

.NET은 좋아할 때마다 .NET이 메모리를 해제한다는 것을 의미하므로 실제로 메모리를 비우는 것에 대해 세분화 된 제어를 제공하는 이유는 무엇입니까?

답변

1

개인적으로 가능한 한 빨리 (즉, 필요하지 않으면 빨리) 메모리를 해제하는 것이 좋은 원칙이라고 생각합니다. 물론, GC가 시작되어 결국 해제됩니다. 그러나 GC는 하나의 스레드를 사용하여 모든 종결자를 호출합니다. 호출 할 종결 자의 수가 많으면 성능에 나쁜 영향을 줄 수 있습니다.

단일 클라이언트를 사용하는 데스크톱 응용 프로그램에서는별로 다르지 않지만 수백 또는 수천 명의 클라이언트가있는 서버 응용 프로그램을 상상해보십시오.

+0

그러나 managed.NET 개체를 사용하여 할당을 해제하는 것과 동일한 제어를 기대하지는 않으므로 관리되지 않는 개체를 사용하는 이유는 무엇입니까? .NET 프로그램의 경우 관리되는 개체가 할당량의 대부분을 차지할 수 있으므로 "필요하지 않은 즉시 관리되는 개체"를 해제하지 마십시오. – Ilya

관련 문제