2011-10-26 2 views
7

나는 누수가있는 것으로 보이는 C# 응용 프로그램을 개발 중입니다. 나는, 메모리 프로파일 러를 사용하고 내개인 바이트 (기본 메모리) 누출을 해결하는 방법?

개인 바이트 킵 모든 힙 증가하지만 바이트는 아마

지금은 붙어

누출 기본 메모리가 있다는 의미하지 않는 것으로 나타났습니다 네이티브 코드에서 메모리 누수를 찾으려면 어떻게해야합니까?

+0

누수가 어디 있는지 아십니까? 우리는 코드없이 당신을 도울 수 없습니다 ... –

+0

당신은 C#에서 네이티브 코드를 작성하지 않습니다. 확실히 할 수있는 일은 InterOp을 올바르게 처리하는 것입니다. –

+0

이것은 프로파일 러의 공통적 인 문제점으로, 알고 싶은 것 이상을 알려줍니다. 증가하는 개인용 바이트는 특이한 것이 아니며 안정화되기까지 시간이 걸릴 수 있습니다. OutOfMemory 예외가 실제로 발생합니까? 그렇지 않다면 무시 비트를 플립하십시오. –

답변

0

더 많은 정보가 없으면 확실한 답변을 드릴 수 없지만 사용하려는 lib에 메모리 누수가있는 것처럼 들립니다. 작성된 언어에 따라 적절한 도구를 사용하여 lib 디렉토리가 필요합니다. lib 디렉토리가없는 경우 개발자에게 문의하여 누출 문제를 해결하도록하십시오.

라이브러리의 이름과 일부 원시 코드 (기본 메소드 서명은 물론)를 게시 할 수 있다면 좀 더 구체적인 조언을 드릴 수 있습니다.

0

.net 프레임 워크가 관리하는 힙의 개인 바이트는 분석 도구로 소스를 분석해야합니다. 레드 게이트 메모리 프로파일 러를 사용하는 것처럼 오브젝트가 생성되었지만 삭제되지는 않습니다.

3

관리되는 응용 프로그램의 네이티브 메모리 누수를 진단하는 것은 다른 네이티브 응용 프로그램에서 메모리 누수를 진단하는 것과 (적어도 처음에는) 비슷합니다.

일반적으로 이러한 문제에 접근하는 방법은 프로세스가 많은 양의 메모리를 누출시키고 전체 프로세스 덤프를 취한 다음 덤프를 검사하여 가장 많은 메모리를 사용하는지 확인하는 것입니다. 예를 들어 프로세스에 ~ 20MB의 일반/초기 개인 바이트가 있지만 개인 바이트가 ~ 200MB가 될 때까지 프로세스가 누출 될 수있는 경우 ~ 180MB의 메모리 누출 가능성이 있음 - 일반적으로 말하기 할당 된 메모리가 무엇이든 어디에서나 찾아야합니다.

Microsoft는 처음에 IIS의 메모리 누수 진단에 사용하기 위해 개발 된 매우 유용한 도구 인 DebugDiag을 가지고 있습니다.이 도구는 매우 vesatile 한 도구이며 메모리 문제를 다룰 때 매우 편리합니다. 크래시 덤프를 제공하면 일부 분석이 수행되며 모듈이 해당 메모리를 모두 할당했는지 여부를 알려 주어야합니다. 그러면 모듈을 사용하는 방법을보다 자세하게 볼 수 있습니다.

0

일반적으로 ANTS Memory Profiler을 사용하여 메모리 누수를 검색 할 때 가장 좋은 결과를 얻었습니다. !

당신이 누출 프로세스의 덤프이있는 경우, 당신은 WinDbg는 그것을 열고 명령을 실행 할 수 있습니다

3

먼저 (Or other tools는, 개인적으로 나는 개미 최상의 경험을했다) : 을 - 개요

를 해결
  • RegionUsageHeap이 큰 경우, RegionUsageIsVAD 인 경우 기본 메모리 누수가
  • 이면 .NET 메모리 누출이어야합니다.프롬프트, 진단 할 프로세스를 선택, 선택 '기본 메모리 누수와 누출 핸들'

    • 사용 DebugDiag이 네이티브 누출 인 경우

    는, 당신은 두 가지 옵션이 있습니다 메모리 누수를 실험 할 때까지 응용 프로그램 작업을 시작하십시오. 완료되면 응용 프로그램의 전체 덤프를 생성하십시오 (누수 규칙을 마우스 오른쪽 단추로 클릭하고 전체 사용자 덤프 선택). 그런 다음 생성 된 덤프를 분석 할 수 있습니다 (이 기능을 효율적으로 수행하려면 기호를 올바르게 구성해야합니다) : '고급 분석'탭에서 '메모리 압력 분석기'를 선택하고 덤프 파일을 열고 '분석 시작'을 누르십시오. 이것은 당신이 분석 할 수있는 보고서를 생성합니다. 자세한 연습을 보려면 page을 참조하십시오.

  • Application Verifier/WinDbg를 사용하십시오. 응용 프로그램 검증 프로그램에서 응용 프로그램 (.exe)을 선택하십시오. 테스트 페이지에서 기본/힙이 선택되었는지 확인하십시오. 하단 창에서 'Traces'가 true로 설정되어 있는지 확인하십시오. 구성을 저장 한 후에는 응용 프로그램을 다시 실행하고 누출이 발생할 때 전체 덤프를 생성하십시오. 덤프가 생성 된 후에 응용 프로그램 플래그를 정리하는 것을 잊지 마십시오. 그런 다음 WinDbg에서 덤프를 열고 '! heap'명령을 사용하여 누수를 조사 할 수 있습니다. 특히 '! heap -l'은 유출 된 블록의 목록을 제공하고, '! heap -p -a'는 할당 스택 호출을 포함하여 블록의 세부 사항을 보여줍니다.

.NET 누수 인 경우 문제를 해결할 수있는 타사 도구가 있습니다. 버전 1.2부터 DebugDiag는 .NET 메모리 누수 분석을 수행 할 수도 있습니다 (그러나 결코 시도하지 않았습니다).

관련 문제