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

问题描述 投票:0回答:3

我使用.NET技术编写了一个Windows服务。我使用`JetBrains dotMemory'工具来了解内存泄漏。

我收到低于报告但作为一个新的蜜蜂,我不知道如何阅读这个。

enter image description here

System命名空间显示更多幸存的字节。但是,我如何知道哪些代码是内存泄漏的根本原因?

memory-management .net memory-leaks
3个回答
0
投票

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

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

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


0
投票

首先,您应该决定要找到哪种内存问题

  1. 不断增长的内存消耗 - 获取基本snaphsot,在内存消耗增加后获得另一个,打开快照比较,打开第一个快照后创建的新对象,查看它们以了解应该收集哪些内容。
  2. 确保某些关键对象不会泄漏 - 将应用程序设置为某个对象不应在内存中显示的状态(例如,关闭某些视图),获取快照,使用“按类别分组”视图中的过滤器以确保此对象为没有在记忆中呈现。
  3. 内存流量 - 如果需要,获取基本快照,在您要检查的应用程序中运行操作/算法,获取快照。打开“内存流量”视图,查看它是否看起来像您实现的那样,或者您希望在操作期间分配更多对象。

其他可能的记忆问题Grab this free book

附:只有作为应用程序作者的人才能回答这个问题,这是一个问题还是它的设计。


-1
投票

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

示例:myClass.DoSomething + = Event_DoSomething

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

myClass.DoSomething - = Event_DoSomething

© www.soinside.com 2019 - 2024. All rights reserved.