关于c#:.Net可执行文件中的内存泄漏工具

Tools for Memory leaks in .Net executable

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What Are Some Good .NET Profilers?

我正在尝试在Windows中测试一个应用程序的内存泄漏。我已经研究过Linux的替代工具(如valgrind),我正在寻找一个适用于Windows的类似工具。.NET的问题在于,内存并不像Linux那样直接释放。

我对.NET的了解有限,所以我的问题是我想使用一个工具来查找Windows.NET可执行文件的内存泄漏。理想情况下,程序应该能够在我使用应用程序时检测到任何内存泄漏。有人知道这种工具或有什么建议来解决这个问题吗?

感谢您的帮助。

感谢您的回复。任何人都能告诉我这些程序是否允许您从命令行执行并将内存泄漏报告输出到文本文件中。

谢谢


Redgate有一个不错的内存分析器,您可以在这里下载。它甚至还有14天的试用期。我用过,而且很好。


还有一些人已经发布了很好的分析程序链接——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垃圾收集器不会立即释放内存。它执行由各种事件触发的定期收集(我不认为MS已经发布了导致垃圾收集器触发的事件的完整列表)。我知道其中一个触发器内存不足,另一个触发器可以是内存分配。如果没有任何东西触发它,GC将不会收集。

这意味着你可以启动一个winform.net应用程序,让它吃掉一堆内存(然后释放它),然后让它整夜不动。如果计算机一直处于空闲状态,GC可能没有启动,应用程序可能仍然拥有大量内存。当有什么事情触发集合时,内存将被释放。人们经常报告.NET应用程序由于这种行为而释放内存的速度似乎很慢。

继续分析——您可能有泄漏,但也要注意,这可能是设计行为。不管怎样,祝你好运!


我们已经尝试了许多.NET的memoryProfiler,并得出结论,.NET内存分析器是目前市场上最好的一个,具有良好的易用性、可用数据量和性能组合。