使用 dotMemory 在 .NET 中获取快照后,第 2 代内存立即被清除

Generation 2 memory cleared as soon as I get a snapshot in .NET using dotMemory

我正在使用 JetBrains dotMemory 调试 .NET Web 应用程序中内存使用率高的问题。 Profiler 声称第 2 代中的内存使用率非常高。但是当我点击"Get Snapshot"时,内存占用立即被清除,我在快照中看不到第2代的内容。

如何调试第 2 代内存?

要获取内存快照,dotMemory 会启动垃圾回收,这就是 Microsoft Profiling API 的工作方式。 Gen2 对象已被 GC 收集,这意味着它们没有引用,它们只是等待 GC(2),GC(0) 发生的频率更低。这意味着您没有内存使用率高的问题。什么时候 运行 GC 释放内存是 CLR 的事情,如果没有,则有足够的内存。

如果您仍然需要查看它们是什么对象,您可以使用 Memory Traffic View to see objects allocated and collected in a range between two snapshots. Or Snapshots Comparison View 查看一个快照中出现的哪些对象在获取另一个快照时死亡。