我在我的控制台应用程序中有这个代码,我正在运行它以测量使用switch-case将字符串映射到字符的性能影响:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=
以下是static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
var watch = Stopwatch.StartNew();
HtmlEntities.Lookup("rfloor");
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
}
背后代码的要点,其中包含一个方法:https://gist.github.com/jamesqo/3331a02f8168a6c782853556ac8f19e5
由于某种原因,当我运行上面的代码时,我在第一次迭代时始终获得一个非常高的数字,然后在下一次迭代时获得更小的数字。例如,以下是运行此操作后输出到控制台的示例:
HtmlEntities
任何人都可以解释为什么会这样吗?据我所知,该方法只是一个巨大的切换案例,它将特定的字符串映射到字符。它是否与必须在第一次尝试时计算字符串的哈希码有关,然后在后续迭代中它被缓存?
为了进行比较,here是00:00:00.0348343
00:00:00.0000016
00:00:00.0000010
00:00:00.0000016
00:00:00.0000016
00:00:00.0000010
00:00:00.0000010
00:00:00.0000016
00:00:00.0000016
00:00:00.0000010
的替代版本,它在运行时初始化一个巨大的HtmlEntities
,然后从中查找值。使用该实现,第一次迭代要快得多,但后续迭代不是那么快。这是使用该应用程序运行应用程序时的示例输出:
Dictionary
有人可以解释这种现象及其发生的原因吗?感谢。