2009-04-29 6 views
3

컨텍스트 : 우리는 WPF 응용 프로그램을 신속하게 전달하기위한 프레임 워크를 구축하고 있습니다. 이 프레임 워크는 Autofac을 IoC 컨테이너로 사용하고 Prism v1의 영역도 사용합니다. Microsoft의 병렬 확장을 사용하여 작업을 예약하고 있습니다.WPF에서 메모리 누수를 추적하십시오

다음과 같은 문제가 있습니다. 빈보기 (너무 영역 및 자리 표시 자 컨트롤이있는 셸)로 응용 프로그램을 부팅하면 메모리가 약 60 초 동안 안정한 상태를 유지 한 후 약 초마다 증가합니다 4kb, 그 다음 4kb, 그 8kb. 3 초마다 16Kb가 메모리 압박에 추가됩니다.

우리가 누출을 추적하려고 시도한 것은 무엇입니까? dotTrace를 사용하여 시작했지만 30 분 간격으로 찍은 두 스냅 샷간에 차이점을 확인할 수 없습니다. 자세한 정보를 제공하지만 다시 2 개의 스냅 샷간에 차이점을 볼 수 없기 때문에 .NET 메모리 프로파일 러로 이동했습니다. 많은 개체가 생성되지만 제거되어 0의 델타가됩니다. 그래서 windbg로 이동했지만 결과는 같습니다.

또 다른 이상한 점은 sysinternals dbgvw를 시작할 때 응용 프로그램에서 호출이 발생하지 않는다는 것입니다.

우리는 누가 무엇을 범인인지 알아 내려고 시도 할만한 제안이 있습니까?

+0

메모리가 증가하고 있는지 확인하기 위해 어떤 측정 항목을 사용하고 있습니까? –

+0

메모리 사용을 측정하는 데 사용하는 메트릭을 정의해야하며, 할당이 관리되는지 또는 관리되지 않는지를 결정해야한다는 데 동의합니까? – morechilli

+0

프로세스의 힙 메모리와 개인 바이트를 조사했습니다. perfmon을 살펴보면 관리되지 않는 메모리가 많이 증가하고 관리되는 메모리는 아주 작은 양의 바이트만으로 한 번씩 (매분마다) 증가한다는 것을 알 수 있습니다. 관리되지 않는 메모리가 훨씬 더 빠르게 증가합니다. 메모리가 증가하고 있는지 확인하기 위해 sysinternals 및 taskmanager에서 프로세스 탐색기를 처음으로 수행했습니다. 우리 응용 프로그램에는 많은 추적 문이있어서 –

답변

0

을보고 해결 방법은 윈도우 핸들러를 매우 첫 번째 객체 또는 다른 것으로 생성하는 것이 었습니다. 감사합니다.

+0

찾을 수있는 곳을 게시 할 수 있습니까? 다른 사람들을위한 정보? 해결 방법이 무엇인지에 대해서는 의견에서 분명하지 않습니다. 내 직감은 STA 스레드에서 WCF 서버를 실행 중이며 일부 리소스를 마무리 할 수는 없지만 명확하지는 않습니다. –

+0

그것은 wpf 애원했고 그 정보는 불행히도 웹상에서 발견되지 않았습니다. 우리는 Microsoft와의 지원 요청을 기록했으며 문제가 무엇인지 추적하기 위해 약 일주일이 걸렸습니다. 나는 그 클라이언트를 지금 남겨 두었으므로 그 해결 방법이 불행하게도 보이지 않는다. WCF는 IIS가 btw로 호스팅되었지만이 문제와 관련이 없습니다. –

+0

아래의 블로그 게시물에서 실제로 숫자 8 (초기 HWND가 XP에서 삭제되면 CMilChannel이 누출 됨)이 기록됩니다. http://blogs.msdn.com/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx –

0

당신은 관리되지 않는 누출을 찾고 있다면 당신은 CRT 기능을 내장하여 놀라 울 정도로 유용한 정보를 얻을 수있는 비주얼 스튜디오를 사용하고 있습니다 : 그것은 WPF 내부 버그이었다 밝혀으로

an answer to a related question

관련 문제