2010-02-16 3 views
0

페이지 파일 크기가 0으로 설정된 컴퓨터에서 .net 코드를 실행 중입니다. 내 응용 프로그램 System.Diagnostics.Process.PagedMemorySize64를 기록하고 방법이 될 수 있습니다> 0기계에 페이징 메모리가 없을 때 Process.PagedMemorySize64> 0 인 이유는 무엇입니까?

값을 보여주고있다?

PagedMemorySize64 대한 설명서를 읽이 속성에 의해 반환

값은 프로세스에 의해 사용되는 가상 메모리 페이징 파일에서 현재의 메모리 사이즈를 나타낸다.

나는 무엇을 놓치고?

배경 :
내가 메모리 누수가 있는지 확인하려고이 일을하고 있습니다. 나는 성장을 보이지 않는 프로필을 사용하고 있지만 System.Diagnostics.Process의 메모리 값은 계속 증가합니다.

큰 개체 힙 조각화를 처리 할 수 ​​있다고 생각합니다. 내 프로그램은 이미지간에 페이드 애니메이션을 사용하여 큰 이미지의 WPF 슬라이드 쇼를 표시합니다.

설명을 환영합니다.

감사합니다.

답변

1

나는이 설명이 오해의 소지가 있다고 생각합니다. 사실상 프로세스의 모든 가상 메모리 페이지는 페이지 가능합니다. 하지만 반드시 페이징 파일로 끝나는 것은 아닙니다. DLL에서로드 된 모든 코드는 거기에 저장할 필요가 없습니다. 메모리 관리자는 공간이 필요할 때 페이지를 버리고 단순히 다시 스왑해야 할 때 DLL에서 다시로드합니다.

.NET 프로세스에서 적어도 해당 페이지에 대한 코드로 매핑 된 페이지가됩니다. CLR, JIT 컴파일러 및 Ngen-ed 어셈블리. 모든 .NET 프레임 워크 어셈블리는 Ngen-ed입니다. 페이징 파일은 나머지, JIT 컴파일 코드 및 데이터에 사용됩니다.

이 숫자는 누출을 진단하는 데 도움이되지 않습니다. 끊임없이 변화하며, 메모리 관리자가 직접 페이지를 교체하도록 결정할 수있는 방법은 없습니다. 다른 방법은 프로그램의 메인 윈도우를 최소화하는 것보다 메모리 관리자가 적극적으로 작업 세트 (= RAM에있는 페이지 수)를 트리밍하도록하는 것입니다. 앞서 좋은 메모리 프로파일 러를 얻으십시오.

+0

실제로 PeakVirtualMemorySize64의 추세를 누출 가능성을 나타내는 지표로보고 있습니다. 나는 피크 값이 시간이 지남에 따라 계속 증가 할 것이라는 어떤 이유도 생각할 수 없다. – Chasler

+0

메모리 누출을 탐지하는 것은 항상 간단합니다. 프로그램이 결국 OutOfMemory 예외로 인해 충돌합니다. 그렇지 않으면 누출이 없습니다. –

+0

이 특별한 경우에는 메모리 관련 직접 쇼 오류로 인해 충돌이 발생했습니다. 메모리가 부족해질 때까지 누출을 감지하고 누출을 격리하려고 노력하고 있습니다. 이 응용 프로그램은 주말에 연중 무휴로 실행해야합니다. – Chasler