0

我有一些 C# 代码。我使用代码分析来查找我不使用using(){}或不调用 dispose 的所有地方。就这样完成了。然而它仍然泄漏。除了两个函数(SetWindowPos、SetForegroundWindow)之外,代码不调用 DllImport,但这些函数从未被调用(主实例不使用它。其他实例使用它,但它们会存活几秒钟)。

不知何故,这段代码正在泄漏。我如何找出问题所在?

4

2 回答 2

6

托管代码中的内存泄漏通常是由于意外引用将对象保存在内存中。事件处理程序是这里的常见罪魁祸首。

你会想要一个内存分析工具。SciTech 的 .NET Memory Profiler可能是最好的,尽管JetBrains 的 dotTraceRedGate 的 ANTS也都不错。

Microsoft 有一个免费的分析工具CLR Profiler可以使用,尽管它有点复杂。请参阅此处此处以获取一些指导。

.NET的DRONE profiler似乎有一个免费的个人许可证,尽管我自己并不熟悉这个工具。他们在这里有一篇关于使用他们的分析器查找内存泄漏的文章。

Visual Studio 的高端版本还包含分析工具。MSDN 包含有关如何使用它们的文档

于 2012-04-18T02:31:18.107 回答
1

使用 Visual Studio(Premium 和 Ultimate)内置的分析器分析您的应用程序,或投资于ANTS之类的工具。

于 2012-04-18T02:27:32.637 回答