WPF中的命令绑定内存泄漏

时间:2010-01-08 05:40:15

标签: wpf memory-leaks commandbinding routed-events

当我创建一个具有CommandBinding到RoutedUICommand的用户控件时,我担心会出现内存泄漏。

情形:

在我存储命令的c类中有一个RoutedUICommand作为静态 在用户控件上实现CommandBindings。 将用户控件添加到主窗体。 从主窗体中删除用户控件,将对它的引用设置为null。

命令绑定的canExecute继续触发。我没有对UserControl的引用,所以它泄露了。表格关闭后,它会长时间保持射击状态。 (我没有看到它停止)如果我强制收集垃圾,它会被收集(canExecute停止开火)

我有一个测试project来说明这一点。我在canExecute中有一个Console.WriteLine,它打印出触发该方法的对象的哈希码。它有一个用于添加新用户控件的按钮和一个用于删除它的按钮。

我不应该关心这个吗?如果强制,则会收集用户控件。这是否意味着它会在下一个系列中收集?我注意到我们的应用程序性能下降,并且正在跟踪内存泄漏等。我们有许多ui元素的复杂表单,当从布局中删除时,它们会闲置处理器和内存空间。 (我们使用了很多命令)我认为一旦从可视树中删除了某些内容,就无法再接收路由事件了。我错过了什么?

1 个答案:

答案 0 :(得分:1)

根据我的理解,命令绑定使用与WeakEvent pattern类似的(但不相同)。

基本上,WeakReference被举行。这将允许它在您的引用消失后工作,但不会阻止您的类在没有其他任何引用时被GC收集。

简而言之,请不要担心 - 它的工作方式应该是正常的。