저는 C#/WPF 응용 프로그램에서 몇 가지 OutOfMemoryExceptions를 실행했습니다. 메모리 사용량을 프로파일 링하려고 시도하는 동안 혼란스러운 데이터가 발생했습니다.Windows 응용 프로그램의 실제 메모리 풋 프린트 찾기
일반적으로 응용 프로그램이 실행 중일 때 Windows 작업 관리자는 메모리 사용량이 약 34MB로 표시됩니다 (개체가 생성되어 가비지 수집됨에 따라 약간 바운스 됨). CLR Profiler 및 dotTrace Memory과 같은 메모리 프로파일 링 응용 프로그램을 실행하면 총 메모리 사용량이 약 1.2MB로 표시됩니다.
왜 이렇게 큰 불일치가 있습니까? 작업 관리자는 이러한 프로파일 러가 인식하지 못하는 것을 무엇입니까?
업데이트 : 응용 프로그램에 일부 진단 코드를 추가하여 Process 클래스를 통해 다양한 메모리 정보를 자주 인쇄합니다.
내 앱을 실행하는 동안 예외 발생시 메모리 덤프를 수행하려면 DebugDiag에 규칙을 설정합니다. 나는 예외를 강제하고 메모리 덤프가 발생했습니다. 이 시점에서 내 앱의 메모리 사용량은 (작업 관리자가 보여주는 것처럼) 32MB에서 145MB로 증가하여 거기에 머물렀다.
이 점프는 아래 표 (WorkingSet64)에서 볼 수 있습니다. 나는 여전히 Process 클래스가 제공하는 모든 종류의 메모리 정보를 이해하려고 노력 중이다. 외부 응용 프로그램이 내 응용 프로그램의 작업 집합을 어떻게 이렇게 키우게합니까?
CLR 프로파일 러는 관리되지 않는 메모리를 표시하지 않습니다. 프로세스 자체와 런타임은 메모리를 사용합니다. http://adwords.google.com/support/bin/answer.py?hl=ko&hl=ko 메모리가 어떻게 사용되는지 자세히 알아 보려면 http://blogs.msdn.com/b/maoni/archive/2004/11/08/tools-that-help-diagnose-managed-memory-related-issues.aspx를 사용하십시오. techne/sysinternals의 briljant 프로세스 탐색기를 사용하거나 사용하십시오. http://technet.microsoft.com/en-us/sysinternals/bb896653 – rene
왜 그런 사용량이 적어 메모리 오류가 발생합니까? 아마도 귀하의 문제는 실제로 메모리 손상입니다. –
다른 프로파일 러를 살펴 보겠습니다. 감사합니다. 앱이 실행되는 플랫폼은 512MB의 메모리 만있는 소형 패널 PC입니다. 또한 플래시 기반 하드 드라이브이기 때문에 페이징이 비활성화됩니다.동시에 실행되는 다른 앱이 있으므로 메모리 사용을 완전히 이해하려고합니다. – BabaBooey