我有一个内存泄漏问题。在TopClass的类实例超出范围之前,obj的实例是否有资格进行垃圾收集?
public class TopClass
{
public void MyFunction()
{
TestClass obj = new TestClass();
obj.PropertyChanged += (s,e) => { //Do some code };
obj = null;
}
}
此外,这会使实例化TopClass并调用MyFunction()的所有对象都不符合GC的条件吗?
据我所知,在托管代码中,一旦应用程序超出范围,那么所有对象都符合条件,但我想知道我的应用程序运行时这会导致内存泄漏。正确?
答案 0 :(得分:4)
不。 obj
将被收集。此代码中没有任何内容会导致强大的引用。
通过作为事件处理程序附加对象可以保持活动状态,但是通过使用事件处理程序无法使对象保持活动状态。
答案 1 :(得分:3)
obj
就有资格进行垃圾收集(但实际收集将在稍后的时间内完成)。订阅PropertyChanged
事件不会创建对obj
的引用,它会创建从obj到TopClass
实例的引用。并且它也不会阻止TopClass
实例的收集,除非它被引用到其他地方