我一直在调查 C# 服务器应用程序中的一些垃圾收集问题。我目前正在使用 PerfView 来执行此操作。在收集了一些数据并获取了大量 GC 统计数据后,我对其中一列“触发原因”有点困惑。我得到两个值“AllocLarge”和“AllocSmall”。我搜索了帮助和谷歌,但找不到这两个术语的确切含义。
最佳答案
.NET GC 处理大于 85K 的对象(大对象)与其他对象(小对象)有很大不同。特别是大型对象仅在“第二代”(最昂贵的 GC 类型)中收集。 “AllocLarge”表示在分配大对象时触发了 GC(因此必定引发了 Gen 2 GC)。 “AllocSmall”表示 GC 发生是为了响应“普通”对象的分配。
请注意,一般来说,拥有短命的大型对象是不好的(因为它们会强制执行昂贵的 GC)。通过查看“GC Alloc Stats” View 并查找伪帧“LargeObject”,您可以在任何地方看到分配大对象的情况。双击它(这会将您带到“调用者” View ,并且 yoiu 将看到您在哪里分配大对象。
关于c# - PerfView GC 触发原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12911323/