이상한 동작이 있습니다. 다음과 같이 완벽하게 작동하는 DLOG-Terminal (Windows Embedded Standard SP1)에서 실행되는 WPF 응용 프로그램을 실행하는 대량의 메모리 누수가 발생합니다.WeakReferences는 임베디드 OS에서 해제되지 않았습니다.
문제를 찾기 위해 많은 노력을 기울 였는데, 그 중 하나를 모니터 옆에 직접 설치하고 ANTs MemoryProfiler를 설치 한 다음 1 시간 동안 테스트하여 두 가지 모두에서 사용자 작업을 시뮬레이션 해 보았습니다. 터미널과 내 개발 PC.
결과로, 이상한 이유로 인하여 임베디드 시스템은 많은 양의 WeakReference 및 EffectiveValueEntry [] 객체를 쌓습니다.
개발 (PC) :
그리고 터미널 :
그냥 ... 클래스 목록을 을 볼
여기있는 몇 가지 사진입니다
누구나 이전에 이와 비슷한 것을 보았으며 이에 대한 해결책이 있습니까? 어디에서 도움을받을 수 있습니까?
(PS .net4 준비 이미지와 함께 설치된 단말기)
PPS : 근접 유권자를 위해 : 나는 질문이 분명하다 생각 : 나는이 문제를 해결할 수있는 방법. 이것은 프로그래밍 문제 N 대 IT/OS의 문제가 있지만 그것은 시간에 오프 주제 가까이 얻을 것이다 오류서버에서이 게시하면 내가 생각하는 경우 당신은 ... 주장 할 수
UPDATE : 문제의 큰 부분을 발견 할 수 있었지만 C++과 조금 비슷합니다. ICommand (RelayCommand-pattern)를 제공하는 WPF-List에 대해 ViewModel 류의 Items 클래스를 사용합니다. 보기 용 ViewModel 속성의 getter에서 즉석에서 작성된 항목이며 응용 프로그램/GC가 사용하지 않는 명령이나 CanExecuteChanged에 대한 구독을 결코 해제하지 않은 것처럼 보입니다 - 메모리 프로파일 러는 " 약한 참조 ". 그 항목 - viewmodels 재사용 및 삭제/그들의 Dispose 사용 된 모든 속성을 null로 설정하려면 내 코드를 변경하고 내가 너무 말했듯이 정리 :이 오래된 C++ 일 "삭제"같은 느낌. 여기에 강제 GC를 사용합니다. 매 30 분마다 수집하십시오 (예, 알 필요는 없지만 지금까지는 다른 해결책이 없습니다). 이 설정을 사용하면 응용 프로그램을 지금까지 문제없이 6 시간 이상 실행할 수 있지만 제대로 작동하지 않습니다.
그들이 내 데스크탑 컴퓨터에있는로 그있는 WeakReferences가 주장하지 않는 이유를 이해할 수없는 ...
이 어떤 생각? 부디!
업데이트 : 난 아직이 문제를 핀 수 아니에요하지만 난 이상한 행동을 참조 : 나는 터미널 중 하나에 내 소프트웨어의 동작을 관찰하는 PC-Anywhere를 사용하는 경우 문제가 사라질 ! 8 시간 후에도 실행됩니다.곧바로 소프트웨어가 정상적으로 실행됩니다. 메모리를 비울 것입니다. (주 화면에 약간의 메모리 카운터 표시를 해두겠습니다. 터미널에 연결하여 메모리가 부족하다는 것을 알리겠습니다. 잠시 기다린 후 메모리가 회수됩니다.))
Devin (한 답변 아래) 올바른 방향으로 리드가 있다고 생각합니다. 원격 제어 소프트웨어의 일부는 finalizer-thread 또는 GC를 차단하는 모든 항목을 차단 해제합니다. 시뮬레이션 된 키보드/마우스 또는 무엇이든간에 .
이 문제에 대한 의견이 있으십니까?
이것은 디버거를 연결하지 않고 VB.NET 어셈블리의 Debug 빌드를 실행하는 것으로 알려진 문제입니다. Edit + Continue 지원을 위해 WithEvents 이벤트를 추적하기 위해 자동 생성되는 약한 참조가 누설됩니다. 그 외, 스크린 샷에서 코드를 리버스 엔지니어링하는 것은 불가능합니다. –
첫 번째 : 이것은 VB.NET 코드 (문제가 아니어야 함)가 아니며 DEBUG 세트로 컴파일되지도 않습니다.이 두 가지 모두 위에는 디버거가 부착되지 않고 실행되었으며 동일한 프로파일 러의 동일한 버전에서 시작하여 동일한 어셈블리와 파일 (Xcopied)을 거의 동일한 데이터로 동시에 처리 할 수 있습니다. WPF 코드 라인을 수없이 보거나 (** 모든 ** 코드를 원하십니까?) 텍스트 파일 ... 아니 오픈 소스 BTW) – Carsten
문제에 대한 참조 @ HansPassant 언급 (예, VB.NET 여기에 중요합니다 : http://support.microsoft.com/?kbid=919481 – roken