1

我创建了一个自定义数据网格控件,该控件继承自 WPF 中的 wpf 数据网格控件。

因此,当用户查询数据库时,数百条记录返回,每条记录有 15 到 20 列。

我相信当我控制屏幕时,分配给该屏幕及其网格的所有内存都应该由 GC 回收。但这种情况并非如此。

我在 Red Gate 的 Memory Profiler 中测试我的应用程序,当我打开屏幕时它显示分配给它的 30 mb 内存。

但是当我关闭此屏幕时,应用程序仍以某种方式保留该内存,当我在 ant 内存分析器中查看原因时,它显示由于我的自定义数据网格,我的屏幕实例仍在内存中。

我已将卸载事件添加到我的用户控件并分离我在此过程中附加的所有事件处理程序。

我错过了什么,我该怎么办?

4

1 回答 1

0

您不必处理 UserControl,并且您可能不应该构建 IDisposable UserControl。那是设计的味道。内存分析器可以告诉您为什么应用程序仍然保留该内存,然后您必须修复该错误。

更新:

要找出谁在 ANTS 中实际持有该内存,您可以使用Instance Retention Graph功能。在 .NET Memory Profiler(我更喜欢 ANTS)中,它被称为Root Path

于 2013-01-24T08:35:07.830 回答