简而言之......这是一个大型的WPF项目
我有一个实施INotifyPropertyChanged
的“患者”课程。当我处理这个类时,我正在检查PropertyChangedEventHandler
是否为null,如果没有,则将其运行到记录侦听器的ListenerDetector
类,以便我们可以跟踪它们并清理泄漏。患者确实有一些绑定到WPF元素的属性以及使用其PropertyChanged
来监视更改的其他对象。
处理完所有其他内容后,我的日志结果如下:
日志:患者仍然附有以下听众: -
System.ComponentModel.PropertyChangedEventManager
问题:
PropertyChangedEventManager
何时创建?
如果Patient.PropertyChangedEventHandler
设置为null
,因此与PropertyChangedEventManager
断开连接,是否有办法重新创建管理器并让它再次收听Patient.PropertyChangedEventHandler
?请不要问为什么会发生这种情况,这是一个紧张的地方:-(
答案 0 :(得分:7)
PropertyChangedEventManager
由WPF创建,以支持绑定到任何实现INotifyPropertyChanged
的类。只要您绑定到实现INotifyPropertyChanged
的任何类,就会创建并使用它。
话虽如此,它是WeakEventManager模式的实现。虽然它仍然显示附加的侦听器,但要意识到此侦听器是使用Weak Event Pattern附加的。一旦发生完整的垃圾收集,这将会消失,因为它使用弱引用来保存订阅。因此,此特定订阅不应成为(长期)内存泄漏的原因。