【问题标题】:detecting object causing memory leak in C#在 C# 中检测导致内存泄漏的对象
【发布时间】:2015-12-26 10:31:42
【问题描述】:

如何在 .net 中检测导致内存泄漏的对象。是否可以使用故障转储检测导致内存泄漏的对象?

【问题讨论】:

标签: c# memory-leaks crash-dumps


【解决方案1】:

可能有一个转储(如果已正确使用,请参阅此article),当然可以有多个转储。

你可以做什么:

  • 如果您还没有,请安装 Windows SDK 以获取适用于 Windows 的调试工具
  • 如果您有 x86 进程(注意:进程的架构是相关的,而不是运行该进程的系统的架构)使用 WinDBG (x86),否则使用 x64 版本。
  • 转到文件 - 打开故障转储,找到您的转储文件并打开它
  • 假设你的进程是.net 4,在调试器中输入

    .loadby sos clr 后跟!dumpheap -stat

  • 这将输出托管类型的计数和类名。

  • 拥有多个转储会让您更轻松,但肯定不如使用内存分析器那么容易

【讨论】:

    【解决方案2】:

    要检测和调查 .NET 中的内存泄漏,您有多种选择:

    1. 使用像RedGate's ANTS 这样的内存分析工具(还有许多其他类似的工具可用)。
    2. 使用带有 SOS 扩展名的 WinDBG。
    3. 使用基于弱引用的内存泄漏检测器自行检测您的应用。

    要在内存泄漏调查中使用故障转储,请参阅 this stackoverflow question 和 this MSDN 链接。

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 2014-05-08
      • 2011-05-12
      • 2021-02-26
      • 2022-01-11
      • 2021-09-01
      • 2011-02-18
      • 2012-07-16
      相关资源
      最近更新 更多