我正在尝试在Windows中测试内存泄漏的应用程序。我已经看过Linux替代品(例如Valgrind),我正在为Windows寻找类似的工具。 .Net的问题在于内存不像Linux那样立即发布。
我对.Net的了解有限,所以我的问题是我想使用一种工具来查找Windows .Net可执行文件的内存泄漏。理想情况下,程序应该能够在我使用应用程序时检测到任何内存泄漏。有没有人知道这样的工具或有什么建议来解决这个问题?
感谢您提前提供任何帮助。
感谢您的回复。任何人都可以告诉我,这些程序是否允许您从命令行执行并将内存泄漏报告输出到文本文件中。
由于
答案 0 :(得分:5)
Redgate有一个很好的内存分析器,你可以下载here.它甚至可以进行为期14天的试用。我用过它非常好。
答案 1 :(得分:3)
其他一些人已经发布了与分析师的良好链接 - redgate的分析器特别好。
这是一篇关于在.Net中发现泄漏的好文章的链接:
http://blogs.msdn.com/b/ricom/archive/2004/12/10/279612.aspx
这是一个很棒的博客 - 作者是MS的支持工程师(这些人真的是优秀的程序员,他们整天都在windebug工作以发现问题)。她的很多文章都是关于跟踪内存泄漏的。她的大多数示例都是asp.net,但大多数技术也适用于Windows应用程序:
http://blogs.msdn.com/b/tess/archive/2006/01/23/516139.aspx
另外,请注意您可能没有真正的泄漏。按设计,.Net垃圾收集器不会立即释放内存。它执行由各种事件触发的定期集合(我不认为MS已经发布了将导致垃圾收集器触发的事物的完整列表)。我知道其中一个触发器是低内存条件,另一个触发器可以是内存分配。如果没有触发它,GC将不会收集。
这意味着您可以启动一个Winform .net应用程序,让它吃掉一堆内存(然后释放它),然后让它整夜坐着。如果计算机一直处于空闲状态,则GC可能没有被触发,并且应用程序仍然可能拥有大量内存。当某些事情发生触发收集时,内存将被释放。人们常常报告.net应用程序由于这种行为而导致释放内存的速度很慢。
继续进行配置文件 - 您可能有泄漏,但也要注意这可能是设计上的行为。无论哪种方式,祝你好运!
答案 2 :(得分:1)
我们已经尝试了很多用于.NET的memoryprofilers,并得出结论:.NET memory profiler是目前市场上最好的,具有易用性,可用数据量和性能的良好组合