代码之家  ›  专栏  ›  技术社区  ›  Jose

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

  •  2
  • Jose  · 技术社区  · 16 年前

    我有个记忆泄漏问题。在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 回复  |  直到 16 年前
        1
  •  4
  •   zneak    16 年前

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

    对象可以通过作为事件处理程序附加来保持活动,但不能通过具有事件处理程序来保持活动。

        2
  •  3
  •   Thomas Levesque    16 年前

    obj 一旦设置为空,就有资格进行垃圾收集(当然,实际收集将在稍后完成)。订阅 PropertyChanged 事件未创建对的引用 OBJ ,它创建从obj到的实例的引用。 TopClass .它不会阻止 头等舱 实例也可以,除非它被引用到其他地方

    推荐文章