2013-07-01 3 views
0

C# .net의 특정 모듈에 대해 GC가 할당, 할당 해제 및 검색 한 메모리 양을 추적하는 방법이 있습니까?C#에서 메모리 할당을 추적하는 방법

내 모듈에서 가능한 memmory 누출을 추적하고 싶습니다. 프로덕션 환경에서 예외적 인 시스템 예외가 발생합니다.

+0

그나마 메모리 누수가 메모리 예외의 아웃에 대한 이유가 있다고 가정합니다. 충분히 큰 연속 블록을 할당 할 수없는 경우 발생합니다. OOMEX를 던질 때 모듈은 무엇을하고 있습니까? – StingyJack

+0

메모리 트레이스/프로파일이 여기에 도움이되지 않을 수도 있습니다. OutOfMemory 예외는 일반적으로 컬렉션이 아닌 _compaction_과 관련이 있습니다. 대부분의 경우 관련 메모리가 모두 해제되어 컴퓨터에서 사용할 수 있지만 문제는 프로세스의 가상 주소 테이블 공간이 정리되지 않은 것입니다. 일반적으로 바이트 배열이나 큰 문자열과 같이 85000 바이트보다 큰 개별 개체 때문입니다. –

+0

모듈 던지는 예외는 실제 범인이 아닐 수도 있습니다. 충분한 LOH를 점유하거나 생성하는 또 다른 모듈 일 수도 있고 GC에 의해 재 요구되지 않을 수도 있습니다. requestiong 프로그램은 충분한 contigeous memorory를 얻을 수 없기 때문에 오류가 발생합니다. 나는 덤프 분석에도 익숙하지 않다. 좋은 방법이 있는가? –

답변

0

메모리 할당을 프로파일 링하기 위해 메모리 프로파일 러를 사용해야합니다.

나는 서로 다른 시간에 두 개의 스냅 샷을 찍고 두 개의 스냅 샷간에 할당되었지만 수집되지 않은 개체를 보여주는 멋진 모드를 사용했습니다. 새 인스턴스를 할당하고 수집하지 않는 메모리 누수를 쉽게 찾을 수 있습니다.

는 두 개의 응용 프로그램 메모리 상태의 차이를 보려면, 당신은 시작과 시간 간격의 끝을 표시 할 수 있습니다, 그 다음 많은 메모리가 할당되고 가 표시된 시간 동안 발표 방법을 보여줍니다 차이 스냅 샷을 캡처 간격. 보기는 라이브, 새 또는 죽은 개체 만 표시하거나 과 죽은 개체 간의 차이를 표시하기 위해 으로 필터링 할 수 있습니다.

+0

dotTrace는 성능 프로파일 러이다. 나는 당신이 dotMemory를 의미했던 것 같아요 : https://www.jetbrains.com/dotmemory/ –

+0

참고 : 모든 메모리 할당을 추적 할 수는 없습니다. 때로는 "프로파일 링 세션 중에 객체 생략"이라고 표시되는 경우가 있습니다. –

+0

예. 2013 년에이 도구는 하나의 도구였습니다. –

0

메모리 프로파일 러는 좋은 생각입니다. PerformanceCounters을 사용하여 대략적인 스케치를 얻을 수도 있습니다. msdn을 참조하십시오. 그런 다음 로컬에서 재생산하기 어려운 환경에서 통계를 수집 할 수 있습니다.

관련 문제