.NET Compact Framework - ComboBox内存泄漏

时间:2013-12-19 16:15:15

标签: c# .net memory-leaks combobox compact-framework

我正在开发.NET CF 3.5中的智能设备应用程序,并且一直在努力解决一些奇怪的内存泄漏问题。

我整理了一个非常基本的应用程序来证明有问题的漏洞。完整的AppVerifier日志也在回购中。

https://github.com/VintageMud/TestCombo

到目前为止,我一直在使用Platform Builder中的AppVerifier工具,它显示了一个正在创建但未被紧凑框架处理的Brush。我可以通过选择一个项目,然后从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 

1 个答案:

答案 0 :(得分:0)

这是在黑暗中完全拍摄的。我对组合框控件的理解是下拉菜单是一个列表框控件。由于您在更改下拉列表的可视状态(更改下拉列表中的选择)时发现正在创建画笔。问题可能出在列表框中而不是组合框中。你能重新创建同一个问题只是一个列表框控件吗?如果不是问题,那么列表框的托管代码是否正在做什么,组合框不能正确释放资源。如果两个控件出现相同的问题,则问题可能不在控件的托管代码中。

您可以尝试的另一件事是覆盖dispose方法并向组合框发送WM_NCDESTROY消息(使用PInvoke + SendMessage或使用反射来调用WndProc)。如果传统方法失败,我不知道为什么会这样,但是试错可能是你最好的选择。