gpt4 book ai didi

wpf - WPF 中的命令绑定(bind)内存泄漏

转载 作者:行者123 更新时间:2023-12-04 15:49:08 24 4
gpt4 key购买 nike

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

设想:

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

命令绑定(bind)的 canExecute 继续触发。我没有对 UserControl 的引用,所以它泄露了。并且在表单关闭后会持续触发很长时间。 (我还没有看到它停止)如果我强制垃圾收集它会被收集(好吧 canExecute 停止触发)

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

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

最佳答案

据我了解,命令绑定(bind)使用类似于(但不相同)WeakEvent pattern 的东西。 .

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

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

关于wpf - WPF 中的命令绑定(bind)内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2025763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com