代码之家  ›  专栏  ›  技术社区  ›  Thomas Bratt

.NET资源泄漏问题

  •  13
  • Thomas Bratt  · 技术社区  · 17 年前

    请为每个项目添加一个答案,以便选出最佳答案:)

    17 回复  |  直到 16 年前
        1
  •  8
  •   Thomas Bratt    17 年前

    未能删除事件处理程序。

       this.myObject.MyEvent += new EventHandler(myObject_MyEvent);
       this.myObject.MyEvent -= new EventHandler(myObject_MyEvent);
    

    CodeProject

        2
  •  7
  •   Ian Boyd    17 年前

    P/调用非托管代码,不清理它们,或者不实现IDisposable来清理它们。

        3
  •  7
  •   Pure.Krome    16 年前

    不使用 Using .

        4
  •  6
  •   Andy White    17 年前

        5
  •  4
  •   Thomas Bratt    17 年前

    未能实现Dispose,因此未处理子对象。

        6
  •  4
  •   Lance Harper    17 年前

    WCF客户端对象的执行方式与其他IDisposable对象不同。如果操作处于故障状态,则必须中止WCF服务的客户端,否则它将保持连接打开。这通常是通过艰苦的方式学会的。

        7
  •  2
  •   Jacob Adams    17 年前

    在使用Office API时,几乎所有内容都是如此。因为它们都是COM对象,所以必须对它们进行处置。如果要使用事件处理程序,还必须保留对它们的类引用,否则它们将丢失引用。在很多情况下,您甚至必须手动调用GC来清理对象

        8
  •  2
  •   Matt Ellis    17 年前

    使用WeakReference可能会导致微妙的泄漏,因为WeakReference持有的对象没有强引用而被清理,但WeakReference本身并不是因为您保留了对它的强引用。

        9
  •  2
  •   Ari Roth    17 年前

    易内存泄漏:在类型列表的类中创建静态字段。将项目添加到列表中。它们永远不会被垃圾收集,因此,除非您在处理完它们后记得手动删除它们,否则内存将永久性地被占用。

        10
  •  1
  •   Thomas Bratt    17 年前

        11
  •  1
  •   Jim Arnold    17 年前

    如果将托管内存计算为“资源”-未能取消挂钩事件处理程序是内存泄漏(以及其他各种更严重的错误)的常见来源。

        12
  •  1
  •   Sam Saffron James Allen    17 年前

    在启动代码之外填充的静态列表、字典和基于集合的资源。

    如果有一个字典用作全局缓存,而不是基于LRU的适当缓存,则可能会发生这种情况。

    静止的 需要格外小心!

        13
  •  0
  •   Otávio Décio    17 年前

    模拟令牌句柄保持打开状态。

        14
  •  0
  •   Tom van Enckevort    17 年前

        16
  •  0
  •   Jeremy McGee    16 年前

        17
  •  0
  •   Yuan    14 年前

    未能在上调用Dispose() Timer

    推荐文章