我正在编写一种数据结构,如果我在我的app.config文件中设置
<gcServer enabled="true" />
,则程序可以在 200 毫秒内添加500,000个项目。如果我设置<gcServer enabled="false" />
,则需要300毫秒。也就是说,将此标志设置为false会使其始终需要更长的时间50%,使用Stopwatch测量。
我想知道为什么会这样,因为我没有执行任何垃圾收集。我知道有时是自动完成的,但在使用CLRProfiler进行分析后,我可以确认未发生0次垃圾收集:
是否有人知道原因?如果垃圾收集器甚至都没有运行,那么服务器垃圾收集器为什么要快得多?下面是我检查速度差异的代码:
Stopwatch sw = Stopwatch.StartNew();
foreach (string s in items)
{
dataStructure.Add(s, s + "a");
}
sw.Stop();
GCSettings.LatencyMode = GCLatencyMode.LowLatency;
会花费 600 毫秒的时间呢? - Ryan Peschel