如何找到应用程序的内存泄漏?

时间:2018-09-05 05:03:29

标签: memory-management .net memory-leaks

我已经使用.NET技术编写了Windows服务。我正在使用“ JetBrains dotMemory”工具来了解内存泄漏。

我正在接受以下报道,但是作为新蜜蜂,我不确定如何阅读。

enter image description here

System名称空间显示了更多的未删除字节。但是我怎么知道哪个代码是内存泄漏的根本原因?

3 个答案:

答案 0 :(得分:0)

您应该查看剩余的字节数/保留的字节数,这些字节数将指向基础实例或创建的根对象。决定是否应保留内存中的指定对象取决于您的应用程序设计和实现。

如果您标识了创建的根对象,则应尝试分离链接并使.net垃圾收集器自动收集不需要的对象。

没有固定的标记点来标识内存泄漏。

答案 1 :(得分:0)

首先,您应该确定要查找哪种内存问题

  1. 内存消耗不断增长-获取基本的snaphsot,在内存消耗增加后获取另一个,打开快照比较,打开在第一个快照之后创建的新对象,查看它们以了解应该收集哪些对象。

    < / li>
  2. 确保某些关键对象不会泄漏-将您的应用设置为不应在内存中显示某些对象的状态(例如,关闭某些视图),获取快照,使用“按类型分组”视图上的过滤器以确保该对象不会出现在内存中。

  3. 内存流量-必要时获取基本快照,在要检查的应用程序中运行操作/算法,获取快照。打开“内存流量”视图,查看它是否看起来像您实现的那样,或者在操作期间分配了预期的更多对象。

Grab this free book处理其他可能的内存问题。

P.S。只有您作为应用程序的作者才能回答这个问题,这是一个问题还是设计上的问题。

答案 2 :(得分:-1)

内存泄漏的一个来源是未取消引用的事件处理程序。

示例:  myClass.DoSomething + = Event_DoSomething

您需要确保清除资源,如下所示:

myClass.DoSomething-= Event_DoSomething