【发布时间】:2012-03-11 18:07:26
【问题描述】:
回到 Java 世界,我能够指定 JVM 应该在第一个 OutOfMemoryError 上创建一个堆转储文件。 C#中有什么等价的吗?
堆转储是理想的,但我会满足于直方图。
如果无法自动执行此操作,是否有办法挂钩此异常,然后手动遍历堆?
【问题讨论】:
标签: c# out-of-memory heap-dump
回到 Java 世界,我能够指定 JVM 应该在第一个 OutOfMemoryError 上创建一个堆转储文件。 C#中有什么等价的吗?
堆转储是理想的,但我会满足于直方图。
如果无法自动执行此操作,是否有办法挂钩此异常,然后手动遍历堆?
【问题讨论】:
标签: c# out-of-memory heap-dump
您可以使用 MS 调试工具 ADPlus 实用程序来获取包含所有堆的进程转储。 然后使用 WinDBG.exe(也在调试工具中),您可以使用 !DumpHeap 命令获取您需要的所有数据。
【讨论】:
我会使用procdump,因为您可以在崩溃之前轻松设置它,以便在崩溃发生时转储内存。然后使用windbg查看内存。
我要补充一点,如果内存的去向不是很明显(使用 sos.dll 工具命令!dumpheap -stat),那么您可以使用 procdump 以特定的时间间隔进行一些故障转储,以便您可以跟踪什么内存在增长。
如果你不熟悉windbg和sos,你可能想check this out。
【讨论】: