【问题标题】:Can there be memory leaks in .NET? If yes, what are the best tool out there?.NET 中是否存在内存泄漏?如果是,那么最好的工具是什么?
【发布时间】:2012-02-25 06:24:16
【问题描述】:

我正在开发一个 C# 4.0 托管代码应用程序。我正在使用不符合 CLS 的外部 DLL。

是否需要内存泄漏检测工具来检查 DLL 中的内存泄漏?如果是的话,最好的工具是什么?

【问题讨论】:

  • 您怀疑内存泄漏吗?
  • 没有“最好的工具”来解决这个问题......它总是取决于 DLL 的作用——例如,我有一些使用非托管内存的 DLL,其他 DLL 是本机的等等。没有工具可以处理所有问题这些同样好......
  • 没有。但作为我们流程的一部分,我每次都必须检查内存泄漏。谢谢
  • 要求“最佳_____”通常不好,因为这是主观的,但我仍然认为从“.NET 中是否存在内存泄漏”的角度来看这是一个很好的问题

标签: c# c#-4.0 memory-leaks memory-profiling


【解决方案1】:

即使在托管代码中,也可能存在内存泄漏。不过,除非你真的找到了,否则我不会深入研究内存泄漏。

如果您确实需要调查泄漏,那么我建议ANTS Profiler,但这有其局限性,因此应根据具体情况进行处理。

【讨论】:

  • 我打算看看是否可以找到关于 .Net 代码存在内存泄漏的良好参考,但是 Oded 的链接很好地解决了这个问题。
【解决方案2】:

是的,.NET 中可能存在内存泄漏。当您只使用基类库时,甚至可以使用它们,因为其中许多类本身会调用非托管代码。

我曾经发生过内存泄漏,因为我在枚举后没有处理 System.DirectoryServices.SearchResultCollection。

但是,我不知道有哪些泄漏检测工具可用。

【讨论】:

    【解决方案3】:

    您可以使用 CLR Profiler、VSTS Profiler、.NET Memory Profiler 或 CLR Profiler 等工具来检查您的对象大小等,因为他们说您可以在任何 .NET 程序中查找内存泄漏并优化内存使用。

    【讨论】:

      【解决方案4】:

      您可以使用免费的 WinDbg、SOS 和 GCRoot 来诊断内存泄漏。 David Anson 向您展示如何使用 this blog post。 Rico Mariani 也有一个good blog post 使用 WinDbg 和 SOS。

      JustTracedotTraceANTS Profiler 等其他产品可以帮助您诊断此类问题。

      【讨论】:

        猜你喜欢
        • 2010-09-29
        • 2015-08-04
        • 2016-08-03
        • 1970-01-01
        • 2018-09-09
        • 2012-02-05
        • 1970-01-01
        相关资源
        最近更新 更多