2014-07-09 3 views
2

내 .NET 응용 프로그램은 .NET 어셈블리를 통해 C++ API에 액세스 할 수 있습니다. Dispose 메서드에서 관리되지 않는 리소스/개체를 올바르게 해제하지 않는다고 가정합니다..NET 응용 프로그램에서 메모리 누수가 발생하는 곳

메모리가 application.exe에서만 증가합니까? 아니면 메모리 누수가 application.exe 외부로 넘어갈 수 있습니까? 그렇다면 응용 프로그램이 종료되면 모든 memeory를 다시 가져올 수 있습니까?

+0

몇 가지 코드를 보여줄 수 있습니까? 실제로 메모리 누수가 있습니까? C++ API 표준은 C++입니까, 아니면 관리 C++입니까? –

+0

MANAGED C++. – HelloWorld

+0

Managed C++라면 누출이 없어야하며 손가락이 엇갈립니다. AppDomain은 결국 모든 것을 정리할 것이지만 여전히 메모리 사용률은 높을 때까지 높을 수 있습니다. –

답변

0

.exe 프로세스에서.

perfmon을 사용하여 프로세스를 모니터링 할 수 있으며 관리되지 않는 메모리 누수가 발생할 경우 총 메모리의 카운터가 올라가지만 .NET 메모리는 안정적으로 유지됩니다.

그렇게 이러한 성능 모니터링 카운터를 사용

프로세스/전용 바이트, .NET CLR 메모리/모든 힙에서 #의 바이트, 즉 당신이 지속적으로 검사되지 않은 관리되지 않는 메모리 누수의 경우

(누수 메모리) 응용 프로그램이 결국 중단됩니다.

그리고 이상이 스레드 참조 : 당신이 관리되지 않는 API를 통해 메모리 누수가있는 경우 Detecting memory leak in mixed environment(Managed-Unmanaged)

0

, 그냥 평소로 누수. 프로세스 메모리 공간에서 손실됩니다.

여기에 .NET에는 특별한 것이 없습니다.

또한 관리되지 않는 라이브러리가 공유 메모리 공간에서 메모리를 할당하는 경우 ... 음, 그 곳에서 누출됩니다.

관련 문제