我创建了一个从 WPF 中的 wpf 数据网格控件继承的自定义数据网格控件。
因此,当用户查询数据库时,几百条记录返回每条记录有十五到二十列。
我相信当我控制屏幕时,分配给此屏幕的所有内存及其网格都应由GC回收。但事实并非如此。
我正在Red Gate的内存分析器中测试我的应用程序,当我打开屏幕时,它会显示分配给它的30 mb内存。
但是当我关闭此屏幕时,应用程序不知何故仍然保留该内存,当我在 ants 内存分析器中查找原因时,它显示我的屏幕实例仍在内存中,因为我的自定义数据网格。
我已将卸载事件添加到我的用户控件,并分离了在此过程中附加的所有事件处理程序。
我错过了什么,我该怎么办?
您不必释放用户控件,并且可能不应该构建 IDisposable UserControl。这是一种设计气味。内存分析器可以告诉您为什么应用程序仍然保留该内存,然后您必须修复该错误。
更新:
要找出谁在 ANTS 中实际保存该内存,请使用实例保留图功能。在.NET Memory Profiler(我更喜欢ANTS)中,它被称为根路径。