我试图衡量一些性能,但我偶然发现了一些非常违反直觉的结果,我不敢相信。即,查询
Dictionary<DateTime>
是
在调试模式下,比在发布模式下。
显然,这个错误一定在我的测量例程中-但是在哪里?这是:
Dictionary<DateTime, int> d1 = new Dictionary<DateTime, int>();
// fill the dictionary
DateTime now = DateTime.Now;
const int items = 100000;
for (int i = 0; i < items; i++)
{
DateTime item = now.AddSeconds(-i);
d1.Add(item, i);
}
Console.WriteLine("Items ready");
const int calls = 100000000;
DateTime queryDate = DateTime.Now;
// query the dictionary
var stopwatch = Stopwatch.StartNew();
for (int i = 0; i < calls; i++)
{
int j;
if (d1.TryGetValue(queryDate, out j))
{
throw new InvalidOperationException();
}
}
stopwatch.Stop();
Console.WriteLine("{0}ms", stopwatch.ElapsedMilliseconds);
我检查/尝试的内容:
-
项目设置只是VS 2015的默认设置:“优化代码”已检查是否发布,但未检查是否调试。要复制,只需创建一个新的控制台应用程序项目,并将代码复制粘贴到
Program
.
-
int
作为字典的键类型,发布模式
是
比预期的调试速度稍快。
请帮我揭开我的盲点!