在C#中的OutOfMemoryException上创建堆转储/直方图的任何方法

本文关键字:直方图 任何 方法 转储 中的 OutOfMemoryException 创建 | 更新日期: 2023-09-27 18:27:35

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

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

如果没有办法自动做到这一点,有没有办法挂起这个异常,然后手动遍历堆?

在C#中的OutOfMemoryException上创建堆转储/直方图的任何方法

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

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

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

我想补充一点,如果内存的去向不是很明显(使用sos.dll tools命令!dumpeap-stat),那么你可以使用procdump以特定的时间间隔进行一些崩溃转储,这样你就可以跟踪内存的增长情况。

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