我已经使用.NET技术编写了Windows服务。我正在使用“ JetBrains dotMemory”工具来了解内存泄漏。
我正在接受以下报道,但是作为新蜜蜂,我不确定如何阅读。
System
名称空间显示了更多的未删除字节。但是我怎么知道哪个代码是内存泄漏的根本原因?
答案 0 :(得分:0)
您应该查看剩余的字节数/保留的字节数,这些字节数将指向基础实例或创建的根对象。决定是否应保留内存中的指定对象取决于您的应用程序设计和实现。
如果您标识了创建的根对象,则应尝试分离链接并使.net垃圾收集器自动收集不需要的对象。
没有固定的标记点来标识内存泄漏。
答案 1 :(得分:0)
首先,您应该确定要查找哪种内存问题
内存消耗不断增长-获取基本的snaphsot,在内存消耗增加后获取另一个,打开快照比较,打开在第一个快照之后创建的新对象,查看它们以了解应该收集哪些对象。
< / li>确保某些关键对象不会泄漏-将您的应用设置为不应在内存中显示某些对象的状态(例如,关闭某些视图),获取快照,使用“按类型分组”视图上的过滤器以确保该对象不会出现在内存中。
内存流量-必要时获取基本快照,在要检查的应用程序中运行操作/算法,获取快照。打开“内存流量”视图,查看它是否看起来像您实现的那样,或者在操作期间分配了预期的更多对象。
Grab this free book处理其他可能的内存问题。
P.S。只有您作为应用程序的作者才能回答这个问题,这是一个问题还是设计上的问题。
答案 2 :(得分:-1)
内存泄漏的一个来源是未取消引用的事件处理程序。
示例: myClass.DoSomething + = Event_DoSomething
您需要确保清除资源,如下所示:
myClass.DoSomething-= Event_DoSomething