我阅读了 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/

10-09 16:38