.NET可执行文件中用于检测内存泄漏的工具

7

可能是重复问题:
有哪些好用的.NET性能分析工具?

我想在 Windows 中测试一个应用程序是否存在内存泄漏。我看过 Linux 的替代品(例如 Valgrind),现在正在寻找类似的 Windows 工具。但 .Net 的问题在于,内存不会像在 Linux 中那样立即释放。

由于我的 .Net 知识有限,因此我的问题是我想使用一种工具来查找 Windows .Net 可执行文件中的内存泄漏。理想情况下,该程序应该能够在我使用应用程序时检测到任何内存泄漏。请问是否有这样的工具或者有什么解决方案吗?

感谢您提前的任何帮助。


感谢回复。请问这些程序中是否有任何一个可以从命令行中执行并将内存泄漏报告输出到文本文件中的工具?

谢谢。

3个回答

5

Redgate有一个很好的内存分析工具,您可以在这里下载。它甚至还带有14天的试用期。我使用过它,非常好用。


@ Lucas B -- 你知道是否可以使用自动化命令行参数运行此程序并将输出保存到文本文件中吗? - chrisg

3

一些人已经发布了关于性能分析工具的好链接,Redgate的性能分析工具特别好。

这是一篇关于如何在.Net中找到内存泄漏的好文章的链接:

http://blogs.msdn.com/b/ricom/archive/2004/12/10/279612.aspx

这是一篇很棒的博客--作者是微软的支持工程师(这些人是真正优秀的程序员,他们整天在windebug上工作以查找问题)。她的许多文章都是关于追踪内存泄漏的。她的大多数示例都是asp.net,但大多数技术也适用于Windows应用程序:

http://blogs.msdn.com/b/tess/archive/2006/01/23/516139.aspx

此外,需要注意的是您可能没有真正的泄漏。按设计,.Net垃圾收集器不会立即释放内存。它会定期进行收集,并由各种事件触发(我认为微软并没有发布完整的触发垃圾收集器的事件列表)。我知道其中一个触发器是低内存条件,另一个触发器可以是内存分配。如果没有任何触发器,GC将不会进行收集。这意味着您可以启动Winform .net应用程序,让它占用大量内存(然后释放它),然后让它整夜保持不动。如果计算机整个时间都处于空闲状态,则GC可能不会触发,应用程序仍可能拥有大量内存。当发生某些事情触发收集时,内存将被释放。人们常常报告说,由于这种行为,.net应用程序似乎难以释放内存。请继续进行分析——您可能存在泄漏,但也要注意这可能是预期的行为。无论哪种方式,祝您好运!

1

我们尝试了许多用于.NET的内存分析工具,得出结论:.NET memory profiler是目前市场上最好的一款,具备易用性、可用数据量和性能的良好组合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接