我正在使用JetBrains dotMemory调试一款.NET web应用程序的高内存使用问题。 Profiler报告称,第二代内存(Generation 2)的使用量非常高。但是,当我点击“获取快照”时,内存使用量会立即清除,并且无法在快照中查看第二代内存的内容。 我该如何调试第二代内存?
为了获取内存快照,dotMemory会启动垃圾回收,这就是Microsoft Profiling API的工作原理。GC已经收集了Gen2对象,这意味着它们没有被引用并且只是等待GC(2),这种情况比GC(0)更少发生。这意味着您没有高内存使用问题。CLR会在何时运行GC以释放内存,如果不需要,则有足够的内存。如果您仍然需要查看这些对象是什么,可以使用内存流量视图查看在两个快照之间分配和收集的对象。或者快照比较视图查看一个快照中存在的对象在获取另一个快照时是否已经死亡。