2013-12-19 45 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)。我不知道如果传统方法失败,为什么这会起作用,但试验和错误可能是你最好的选择。