我正在开发.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
答案 0 :(得分:0)
这是在黑暗中完全拍摄的。我对组合框控件的理解是下拉菜单是一个列表框控件。由于您在更改下拉列表的可视状态(更改下拉列表中的选择)时发现正在创建画笔。问题可能出在列表框中而不是组合框中。你能重新创建同一个问题只是一个列表框控件吗?如果不是问题,那么列表框的托管代码是否正在做什么,组合框不能正确释放资源。如果两个控件出现相同的问题,则问题可能不在控件的托管代码中。
您可以尝试的另一件事是覆盖dispose方法并向组合框发送WM_NCDESTROY消息(使用PInvoke + SendMessage或使用反射来调用WndProc)。如果传统方法失败,我不知道为什么会这样,但是试错可能是你最好的选择。