当我使用 dotMemory 在 .NET 中获取快照后,第 2 代内存就会被清除

cbp*_*cbp 5 c# dotmemory

我正在使用 JetBrains dotMemory 调试 .NET Web 应用程序中内存使用率过高的问题。Profiler 声称第 2 代的内存使用量非常高。然而,当我点击“获取快照”时,内存使用量立即被清除,并且我无法在快照中看到第 2 代的内容。

如何调试第二代内存?

Ed.*_*ard 4

为了获取内存快照,dotMemory 会启动垃圾收集,这就是 Microsoft Profiling API 的工作原理。Gen2 对象已被 GC 收集,这意味着它们没有引用,它们只是等待 GC(2),而 GC(2) 发生的频率低于 GC(0)。这意味着您不存在内存使用率过高的问题。何时运行 GC 来释放内存是 CLR 的问题,如果不运行,则内存足够。

如果您仍然需要查看它们是什么对象,您可以使用内存流量视图来查看在两个快照之间的范围内分配和收集的对象。或者使用快照比较视图来查看一个快照中显示的哪些对象在获取另一快照期间死亡。