2013-12-19 44 views
1

我正在.NET CF 3.5中開發智能設備應用程序,並一直在努力解決一些奇怪的內存泄漏。.NET Compact Framework - 組合框內存泄漏

我整理了一個非常基本的應用程序,演示了有問題的泄漏。完整的AppVerifier日誌也在回購。

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)。我不知道如果傳統方法失敗,爲什麼這會起作用,但試驗和錯誤可能是你最好的選擇。