我阅读了 Do event handlers stop garbage collection from occuring? 问题的答案,但是当发布者是目标时会发生什么?
更具体地说,我正在为 WPF 应用程序使用 MVVM 设计。模型 View 类在每次更改时引发 NotifyPropertyChanged。在某些类中,我需要在修改某些内容时调用一个方法。
我想这样做:
this.PropertyChanged += this.MyHandler;
这个实例会被 GC 销毁吗?
最佳答案
GC 会查看对象的任何引用当前是否 Root 于应用程序中。它足够聪明,可以像上面那样处理循环引用。
此外,它足够智能来处理您有两个对象 A 和 B 的情况,并且:
A.Event += B.Handler;
B.Event += A.Handler;
如果 A 和 B 都超出范围,则 GC 足够聪明,可以找到并清理这两个对象,即使它们相互订阅。但是,如果一个单独的对象(正在使用)引用其中一个,它将阻止两者都被收集。
与引用计数解决方案相比,这是真正的 GC 解决方案的主要优势之一。引用计数将无法收集它,但 .NET gc 会完美地处理它。
关于c# - 自处理事件会阻止实例被垃圾收集吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/888750/