2013-12-19 3 views
1

.NET Compact Framework에서 스마트 장치 응용 프로그램을 개발 중이며 일부 이상한 메모리 누수를 해결하는 데 어려움을 겪고 있습니다..NET Compact Framework - ComboBox 메모리 누수

나는 누출 문제를 보여주는 아주 기본적인 앱을 만들었습니다. 전체 AppVerifier 로그도 repo에 있습니다.

https://github.com/VintageMud/TestCombo

은 지금까지 나는 플랫폼 빌더에서 AppVerifier는 도구를 사용하고 그리고 그것은 브러쉬가 만든하지만 컴팩트 프레임 워크에 의해 처리되지하는 모습입니다. 하나의 항목을 선택한 다음 ComboBox와 다른 항목을 선택한 다음 응용 프로그램을 닫아서 문제를 다시 만들 수 있습니다. 이 작업을 반복하면 여러 개의 브러시가 생성되지만 삭제되지 않습니다.

나는 ComboBox를 명시 적으로 처리하려고 시도했지만 동일한 결과가 있습니다. 내 자신의 컨트롤을 처음부터 작성하는 것 외에는이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

꼬리 로그 :

| shim_usergdi.dll 4 | 1 kernel.dll 8011a2d0' 0x400251dc: coredll.dll!(null) + 151dch 
    | shim_usergdi.dll 4 | 1 kernel.dll 8011a2d0' 0x41e1b254: netcfagl3_5.dll!(null) + 1b254h 
    | shim_usergdi.dll 4 | 1 kernel.dll 8011a2d0' 0x41e1b2dc: netcfagl3_5.dll!(null) + 1b2dch 
    | shim_usergdi.dll 4 | 1 kernel.dll 8011a2d0' 0x41e1b3dc: netcfagl3_5.dll!(null) + 1b3dch 
    | shim_usergdi.dll 4 | 1 kernel.dll 8011a2d0' 0x41e1b4bc: netcfagl3_5.dll!(null) + 1b4bch 
    | shim_usergdi.dll 4 | 1 kernel.dll 8011a2d0'Un-freed items: 
    | shim_usergdi.dll 4 | 1 kernel.dll 8011a2d0' 0x0010147a CreateSolidBrush PerfCount: 2383733220 

답변

0

이 어둠 속에서 총 기회입니다. 콤보 상자 컨트롤의 내 이해 드롭 다운 메뉴는 목록 상자 컨트롤입니다. 드롭 다운의 시각적 상태를 변경할 때 브러시가 생성된다는 것을 알기 때문에 (드롭 다운에서 선택 항목을 변경). 문제는 콤보 상자가 아닌 목록 상자에있을 수 있습니다. 동일한 문제를 목록 상자 컨트롤로 재현 할 수 있습니까? 질문이 아니라면, 목록 상자의 관리 코드가 콤보 상자가 자원을 적절하게 해제하지 않는다는 것을 알 수 있습니다. 두 컨트롤에 동일한 문제가 발생하면 문제가 컨트롤의 관리되는 코드에 없을 수 있습니다.

또 다른 방법은 dispose 메서드를 재정의하고 WM_NCDESTROY 메시지를 콤보 상자 (PInvoke + SendMessage를 사용하거나 리플렉션을 사용하여 WndProc 호출)로 보냅니다. 기존의 방법이 실패해도 이것이 왜 효과가 있을지 모르지만 시행 착오가 최선의 방법 일 수 있습니다.