2011-01-19 4 views
2

일부 C# 함수가 있는데 바이트 단위로 메모리 사용량을 측정하고 싶습니다. 다음과 같이 내가 GC.GetTotalMemory을 사용 :메모리 사용량 측정에 문제가 있습니다.

long val1 = GC.GetTotalMemory(false); 

// my code 

long val2 = GC.GetTotalMemory(false); 

long result = val2 - val1 ; 

내가 GC.GetTotalMemory에 대한 인수로 진실과 거짓을 모두 통과했지만, 나는 부정적인 결과 값을 얻을 왜을 val2에서 val1을 뺄 때 나는 모른다 .. .. 또 다른 문제는 GC.GetTotalMemory가 각 실행마다 다른 값을 부여한다는 것입니다. 정확하지 않다고 생각합니다.

왜 부정적인 결과 값을 얻는 지 알 수 있습니까? 내가 그것들을 모두 시험해 보았을 때 부정적인 결과 값을 얻었지만 (사실 또는 거짓) argumenet 때문인가요?

C# 함수의 각 실행마다 다른 값을 얻는 이유는 누구나 알 수 있습니까? 사람이 윈도우에서 C#을 기능에 대한 바이트의 메모리 사용량을 측정 할 수있는 더 효율적인 방법이있는 경우

, 저와 감사를 알려주세요 제발 많이

+1

그냥 **하지 **. 메모리 문제가있는 경우 프로파일 러를 사용하십시오. – SLaks

+0

제대로 작동하고 있음을 의미합니다. 그것은 또한 당신이 정말로 이것을해서는 안된다는 것을 의미합니다. 당신이 얻는 것이 무엇이든 무의미합니다. –

답변

3

가비지 콜렉션이 자리를 차지하게 수 있기 때문에 당신은 부정적인 결과를 수신 할 수있다 두 점 사이에서, 소비 된 총 메모리가 감소하게됩니다. 실제로 GC.GetTotalMemory 함수에 you're actually allowing it to wait for a garbage collection to take place을 전달하면 반환 할 음수 값의 확률이 높아집니다.

성능 모니터에서 다양한 (.NET 및 프로세스/메모리) 카운터를보고 전후를 확인하여 더 나은 (더 정확하게)이 작업을 수행 할 수 있다고 가정합니다.

0

GC.GetTotalMemory가 특정 메소드에 의해 할당 된 메모리 양을 결정하는 데 도움이되지 않는다고 생각합니다. GC는 그 동안 아무것도 수행하지 않았고 그 결과는 신뢰할 수 없습니다.

프로파일 러를 사용하여 프로그램의 메모리 할당을 식별 할 수 없습니다. VS 2010 프로파일 러 또는 RedGate의 ANTS 프로파일 러 중 하나가 2 주 동안 무료입니다.

sys 내부의 유틸리티는 프로그램, 작업 세트 또는 이와 유사한 항목의 할당 된 메모리를 확인하는 데 유용합니다.