这是否会导致内存泄漏(在.NET中)?

时间:2010-02-23 01:02:10

标签: .net memory-management

我有一个内存泄漏问题。在TopClass的类实例超出范围之前,obj的实例是否有资格进行垃圾收集?

public class TopClass
{
  public void MyFunction()
  {
    TestClass obj = new TestClass();
    obj.PropertyChanged += (s,e) => { //Do some code };
    obj = null;
  }
}

此外,这会使实例化TopClass并调用MyFunction()的所有对象都不符合GC的条件吗?

据我所知,在托管代码中,一旦应用程序超出范围,那么所有对象都符合条件,但我想知道我的应用程序运行时这会导致内存泄漏。正确?

2 个答案:

答案 0 :(得分:4)

不。 obj将被收集。此代码中没有任何内容会导致强大的引用。

通过作为事件处理程序附加对象可以保持活动状态,但是通过使用事件处理程序无法使对象保持活动状态。

答案 1 :(得分:3)

只要将它设置为null,

obj就有资格进行垃圾收集(但实际收集将在稍后的时间内完成)。订阅PropertyChanged事件不会创建对obj的引用,它会创建从obj到TopClass实例的引用。并且它也不会阻止TopClass实例的收集,除非它被引用到其他地方