【问题标题】:Any way to create a heap dump/histogram on OutOfMemoryException in C#?有什么方法可以在 C# 中的 OutOfMemoryException 上创建堆转储/直方图?
【发布时间】:2012-03-11 18:07:26
【问题描述】:

回到 Java 世界,我能够指定 JVM 应该在第一个 OutOfMemoryError 上创建一个堆转储文件。 C#中有什么等价的吗?

堆转储是理想的,但我会满足于直方图。

如果无法自动执行此操作,是否有办法挂钩此异常,然后手动遍历堆?

【问题讨论】:

标签: c# out-of-memory heap-dump


【解决方案1】:

您可以使用 MS 调试工具 ADPlus 实用程序来获取包含所有堆的进程转储。 然后使用 WinDBG.exe(也在调试工具中),您可以使用 !DumpHeap 命令获取您需要的所有数据。

a little old but useful HOWTO link

【讨论】:

  • 感谢@Menahem,很好的建议,但是我真的很想要可以在用户机器上记录输出的东西,我当时无法附加调试器。
  • @chillitom 在这种情况下,您可以将调试器配置为在客户端机器上静默转储,当它发生时自动进行。然后将转储复制到可以分析它的机器上。 Mitch Wheat 发布了一个链接,说明如何完成这项工作。
【解决方案2】:

我会使用procdump,因为您可以在崩溃之前轻松设置它,以便在崩溃发生时转储内存。然后使用windbg查看内存。

我要补充一点,如果内存的去向不是很明显(使用 sos.dll 工具命令!dumpheap -stat),那么您可以使用 procdump 以特定的时间间隔进行一些故障转储,以便您可以跟踪什么内存在增长。

如果你不熟悉windbg和sos,你可能想check this out

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2011-09-06
    • 2013-08-04
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多