2009-09-17 3 views
6

관련 점유하는 메모리 양을 확인할 수 있습니다
Preventing Memory issues when handling large amounts of text은 어떻게 프로그램이 현재 내 앞의 질문에

내 프로그램이 점유 얼마나 많은 메모리 공간을 확인하는 방법이 있나요 ? 결국 많은 양의 텍스트 파일을 처리하고 처리 된 객체를 메모리에 저장합니다. 너무 많은 정보가있을 때가 있으며, 나는 추리 할 것입니다. 나는 메모리 할당 문제를 피하는 해결책을 가지고 있지만, 페이징을 피하기 위해 필요할 때만 사용하고 싶다. 필연적으로 성능이 떨어지면 궁극적으로 성능이 저하 될 것이다. 얼마나 많은 메모리를 차지하고 있는지 알아낼 수있는 방법이 있습니까? 필요한 때에 만 내 정보를 페이지 할 수 있습니까?

참고 : 내 프로그램에서 필요한 경우 페이징을 시작할 때 사용할 수있는 솔루션을 찾고 있습니다.

답변

5

당신은 GC.GetTotalMemory을 시도 할 수 있습니다 :

는 현재 할당 된 것으로 생각 바이트 의 수를 가져옵니다. 매개 변수는이 메서드가 반환하기 전에 짧은 간격으로 을 기다릴 수 있는지 여부를 나타내며 시스템 이 가비지 수집을 허용하고 개체를 마무리 할 수 ​​있도록합니다. 주의 할

중요한 것은이 부분이다 : "현재 할당 된 것으로 생각 바이트 의 수를 가져옵니다." 이는이 방법이 100 % 정확하지 않을 수도 있음을 의미합니다.이 사실을 알고있는 한 응용 프로그램 실행의 특정 지점에서 가상 메모리 사용률에 대한 대략적인 아이디어를 얻을 수 있어야합니다.

편집 : 나 지금 아마 더 생산적 일 것이다 다른 솔루션을 제공하자 perfmonCLR performance counters를 사용합니다.

+0

> "[...] 현재 관리 메모리에 할당 된 바이트의 수의 가장 근접한 근사치"이 늘 모든 관리되는 어셈블리에서 사용되는 메모리 양을 알아보십시오. –

+0

예, 현재 AppDomain에만 적용됩니다. 이런 종류의 일에 perfmon을 사용할 것을 강력히 권합니다. –

3

코드 프로파일 러를 사용해야합니다. 이것들은 정확히 무슨 일이 일어나고 있는지, 메모리가 얼마나 많이 소모되었는지 등을 알려줍니다.

FYI : 생각하는 곳이 거의 없습니다.

+0

+1 : 귀하의 질문을 만족 시키지는 못하지만 (코드에서하기를 원하기 때문에) 여전히 그렇습니다. 프로파일 링은 코드 접근 가능 측정에 의해 가려 질 수있는 메모리 사용 측면을 밝혀주기 때문에 여전히 설계 단계 중 하나입니다. 예를 들어,'WorkingSet64'에는 공유 메모리가 포함되어 있습니다.이 메모리는 페이지 여부를 결정할 때 합계에서 뺄 수 있습니다. –

7
long bytes = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
3

System.Diagnostics.Process.GetCurrentProcess 바이트 길이 =(). WorkingSet64 더 See Here

관련 문제