WPF中的命令绑定内存泄漏

Ara*_*and 6 wpf memory-leaks routed-events commandbinding

当我创建一个具有CommandBinding到RoutedUICommand的用户控件我担心我得到内存泄漏.

场景:

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

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

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

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

Ree*_*sey 2

根据我的理解,命令绑定使用类似于(但不相同)WeakEvent 模式的东西。

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

简而言之,别担心——它正在按照它应该的方式工作。