2016-08-24 4 views
0

최근에 일부 사용자 지정 작업으로 워크 플로 디자이너를 다시 호스팅하는 WPF 응용 프로그램을 개발했습니다. 다음 시나리오를 수행 한 후 메모리 문제가 발생했습니다. 150 개가 넘는 활동이있는 이전 워크 플로를 열었을 때까지 모든 작업을 수정하기 시작했습니다 (창 열기, 일부 데이터 수정, 저장 및 창 닫기). 예외가 발생했습니다. 이 단계에서 응용 프로그램의 메모리 사용량은 1.4GB 였으므로 솔루션을 찾기 시작했습니다. 응용 프로그램에서 MVVM을 사용하고 있음을 알고 데이터와 명령 바인딩을 사용하고 있습니다. 내보기는 metro mahapps 창에 정의 된 window.close() 명령을 사용하여 제대로 닫힙니다.WPF WF4.5 디자이너 메모리 문제 재 호스팅

ANTS Memory Profiler를 사용하여 누수의 원인을 찾았으며 응용 프로그램 메모리 사용량이 1.35GB 일 때 메모리 스냅 샷을 찍었습니다. 분석 후 메모리에 보관 된 인스턴스는 System.Byte [] 유형이고 GC 루트의 경로는 다음과 같습니다. System.Byte [] ==> System.IO.MemoryStream ==> System.Windows.Baml2006.SharedStream = System.Windows.Baml2006.Baml2006Reader System.Windows.ResourceDictionnary ==> List ==> ResourceDictionaryCollection ==> ResourceDictionary =>> => System.Windows.EffectiveValueEntry [] ==> MyView

정말 고맙습니다. 감사.

+0

Autofac 또는 다른 IOC 컨테이너를 사용하고 있습니까? – helmsb

+0

아니요 @helmsb 아니에요. – Ouuss

답변

0

.net 4.0 프로젝트에서이 문제가 발생했습니다. 당시 워크 플로 디자이너와 관련하여 알려진 문제였습니다. 나는이 문제가 .net 4.5에서 해결되었지만 아마도이 오래된 해결책이 약간의 용도로 사용될 수 있다고 생각했다.

다음 link을 사용하면 자체 앱 도메인에서 워크 플로 디자이너를 마샬링 할 수 있습니다. 따라서 효과적으로 AppDomain Isolated WPF Add-Ins를 사용하여 디자이너를로드 할 수 있습니다.

이것은 우리가 재 호스팅 한 솔루션에서 발생했던 문제의 메모리 누출을 확실히 제거했습니다.