我正在编写一个数据结构,如果我<gcServer enabled="true" />
在我的app.config
文件中设置,程序会在 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();