4

我一直在调查 ac# 服务器应用程序中的一些垃圾收集问题。我目前正在使用 PerfView 来执行此操作。在收集了一些数据并获得了大量 GC Stats 之后,我对“触发原因”列之一有点困惑。我得到两个值“AllocLarge”和“AllocSmall”。我搜索了帮助和谷歌,找不到这两个术语的确切含义。

4

1 回答 1

11

.NET GC 处理大于 85K 的对象(大对象)与其他对象(小对象)非常不同。特别是大型对象仅在“第 2 代”(最昂贵的 GC 类型)中收集。'AllocLarge' 表示在分配大对象时触发了 GC(因此必须引发 Gen 2 GC)。'AllocSmall' 表示 GC 是为了响应分配一个“普通”对象而发生的。

请注意,一般来说,拥有短暂的大对象是不好的(因为这些会强制执行昂贵的 GC)。通过查看“GC Alloc Stats”视图并查找伪框架“LargeObject”,您可以在任何地方看到分配了大对象的信息。双击它(这会带你进入'调用者'视图,你会看到你在哪里分配大对象。

于 2012-11-12T18:30:51.527 回答