PropertyChangedEventManager何时创建,何时附加?

Pau*_*ich 8 .net wpf memory-leaks inotifypropertychanged

简而言之......这是一个大型的WPF项目

我有一个实施的"患者"课程INotifyPropertyChanged.当我处理这个类时,我正在检查它是否PropertyChangedEventHandler为null,如果没有将它运行到一个ListenerDetector记录监听器的类,那么我们可以跟踪它们并清理泄漏.患者确实有一些绑定到WPF元素的属性以及PropertyChanged用于监视更改的其他对象.

处理完其他所有内容后,我的日志结果如下:

记录:患者仍然附有以下听众: - System.ComponentModel.PropertyChangedEventManager

问题:何时PropertyChangedEventManager创建?

  • 创建患者时
  • 当WPF绑定到患者属性时
  • 其他一点.

如果Patient.PropertyChangedEventHandler设置为null并因此断开连接PropertyChangedEventManager是否有任何方法可以重新创建管理器并让它Patient.PropertyChangedEventHandler再次收听?请不要问为什么会发生这种情况,这是一个紧张的地方:-(

Ree*_*sey 7

PropertyChangedEventManager由WPF创建,以支持绑定到任何实现的类INotifyPropertyChanged.一旦绑定到任何实现的类,它就会被创建和使用INotifyPropertyChanged.

话虽这么说,它是WeakEventManager模式的一个实现.虽然它仍然显示附加的侦听器,但要意识到此侦听器是使用弱事件模式附加的.一旦发生完整的垃圾收集,这将会消失,因为它使用弱引用来保存订阅.因此,此特定订阅不应该是(长期)内存泄漏的原因.