2011-02-04 3 views
1

많은 질문이 있습니다. 이에 대해서는 매우 구체적입니다. 두 가지 지침으로 콘솔 응용 프로그램을 만듭니다. 큰 용량의 목록을 만들고 샘플 데이터로 채운 다음 해당 목록을 지우거나 null로 만듭니다. 내가 알고 싶은 것은 내가 디버깅하는 동안/측정/프로파일을 알 수있는 방법이 있다면, 목록이 지워지고 null-ed 된 후에 응용 프로그램이 사용하는 실제 메모리가 목록과 거의 같다면 생성되어 채워졌습니다. 응용 프로그램이 정보를 처리하고 GC가 수집을 완료했다는 것을 확실히 알고 있지만, 이후에 내 응용 프로그램이 얼마나 많은 메모리를 소비하는지 확실히 알 수 있습니까? 나는 목록을 작성하는 과정에서 많은 메모리가 할당되고 필요하다면 다른 프로세스에서 메모리를 사용할 수 있지만 그 후에는 응용 프로그램이 소비 한 실제 메모리를 측정 할 수 있다는 것을 알고있다. 끝? 감사합니다..net 메모리 측정 및 프로파일 링

편집 : 여기에 제 실제 시나리오와 목표가 있습니다. USB 장치를 통해 많은 양의 데이터를 읽는 WPF 응용 프로그램에서 작업합니다. 어떤 시점에서, 응용 프로그램은 약 700MB 이상의 메모리를 할당하여 모든 List 데이터를 저장하고 파싱, 분석 한 다음 파일 시스템에 씁니다. 파일 시스템에 데이터를 쓸 때 모든 목록을 삭제하고 이전에 큰 데이터를 보유한 모든 콜렉션을 처리하므로 다른 데이터 처리를 할 수 있습니다. 성능 문제가 발생하거나 결국 모든 메모리를 다 사용하지 않을 것임을 알고 싶습니다. 많은 양의 메모리를 사용하는 프로그램에서 문제가 없지만 몇 가지 USB 처리 후에도이 프로그램을 사용하는 것은 좋지 않습니다. 어떻게 제어 할 수 있습니까? 이와 같은 경우에 메모리 또는 프로세스 프로파일 러가 사용됩니까? 단순히 작업 관리자를 사용하면 응용 프로그램이 800MB의 메모리를 차지하는 것을 볼 수 있지만 콜렉션을 지우면 메모리는 그대로 유지됩니다. Windows가 필요하지 않는 한이 작업이 중단되지 않는다는 것을 이해합니다. 따라서 메모리가 지워졌고 (응용 프로그램이나 창에 의해) 자유롭게 사용할 수 있는지 궁금합니다.

답변

2

실제 메모리를 의미하는 경우 Windows에서 "실제 메모리"사용량을 측정하는 것은 매우 어렵습니다.- CLR 프로파일, 또는 이것에 나와있는 다른 프로파일 - Best .NET memory and performance profiler? 과정 (참조 Zooba의 대답) 할당 관리 메모리

  • 금액에 할당 된 메모리의

    1. 금액 : 당신이 같은 다른 뭔가를 원하는 대부분의 likley 미래 할당을 관리하기위한 GC가 (이 할당 된 메모리를 유지할 수 있습니다 - 작업 관리자 응용 프로그램은 가비지 콜렉션이 완료된 후 메모리의 양이 프로세스 (1) 변경에 할당하는 것이 필요하지 않다고

    주에 대한보고 무엇

  • 비헤이비어는 메모리 할당에 대한 CLR에만 국한되지 않습니다. 대부분의 메모리 할당자는 일부 방법으로 강제 해제하지 않는 한 나중에 사용하기 위해 비어있는 블록을 유지합니다. http://blogs.msdn.com/b/maoni/ 블로그는 GC/메모리에 대한 세부 정보를 제공하는 훌륭한 자료입니다.

  • 2

    Process Explorer 필요한 정보. 특히, 프로세스에 대한 "개인 바이트 기록"그래프에 가장 관심이있을 것입니다.

    또는 Windows의 성능 모니터를 사용하여 특정 응용 프로그램을 추적 할 수도 있습니다. 이것은 Process Explorer에 동일한 정보를 제공해야하지만 실제 번호를 별도의 파일에 쓸 수 있습니다.

    Process Explorer window

    내가 personaly 그것은 당신이 당신의 메모리 사용을 참조하는 데 사용할 수있는 실시간 옵션이 SciTech Memory Profiler
    를 사용

    1

    (... 내가 할 수 있기 때문에 사진). 그것은 메모리 누수에 관한 많은 문제를 찾는데 도움이됩니다.

    관련 문제