1

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

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

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

4

2 回答 2

0

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

一个有点旧但有用的 HOWTO 链接

于 2012-03-11T09:43:47.547 回答
0

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

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

如果你不熟悉 windbg 和 sos,你可能想看看这个

于 2012-03-11T10:01:30.797 回答