我以前见过这个问题,但这些回答并没有符合我的需要。我正在寻找一种方法来分析来自使用大量内存的C#应用程序的堆转储。
我遇到的一个问题是,我使用的工具是x86。一些吸引人的工具(VS2013终极版、Antz内存分析器、PerfView)就是这样。
我也投入了一些时间尝试CLR,但这似乎不起作用(编辑-工作时,附加到应用程序)。
现在,我觉得我唯一的选择就是跳进Windbg。还有其他工具可以支持这一点吗?
谢谢!
发布于 2014-09-26 07:22:30
我经常使用Windbg。DumpHeap -stat将为您提供良好和快速的结果,以检查哪些对象正在泛滥。如果幸运的话,您可以从呼叫堆栈中获得分配这么多数据的线索。
就我个人而言,我更喜欢PerfView,因为它更快(它对堆进行采样),并且只存储在.gcDump文件中所需的转储数据的一小部分。您可以使用PerfView获取堆快照,并将其发送到比原始转储小得多的HQ (因子100通常较小)。我分析了、36 GB、转储和PerfView中存在的一些问题,但万斯·莫里森帮助我修复了发生堆栈溢出的堆遍历代码。
PerfView可能是x86,但是从转储中提取数据的内部HeapDumper当然是64位。
另一种没有转储的方法是在PerfView .NET堆Sampl跟踪中启用。通过这种方式,您可以获得所有分配的调用堆栈,从而直接进入正在进行分配的代码。
https://stackoverflow.com/questions/26046346
复制相似问题