0
我試圖衡量一些表現,但我偶然發現了一些我反對相信的反直覺結果。也就是說,查詢Dictionary<DateTime>
的速度是,在DEBUG模式下比在RELEASE模式下快。日期時間字典在DEBUG模式下更快?
顯然,錯誤必須在我的測量程序 - 但在哪裏?這是它:
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);
我通過點擊Ctl-F5啓動這個控制檯應用程序,所以VS沒有連接。在我的筆記本電腦上,我在DEBUG編譯版本中獲得了大約1200ms的時間,在RELEASE模式下大約爲2200ms(!)。
我已經檢查/嘗試:
- 項目設置是VS 2015只是默認:「優化代碼」被選中的釋放,但不進行調試。要重現,只需創建一個新的控制檯應用程序項目並將代碼複製粘貼到
Program
。 - 當我用
int
作爲字典的關鍵字類型來測量同樣的事情時,RELEASE模式是比DEBUG稍微快一點。
請幫忙揭開我的盲點!
你測量過多少次? – SeM
十,二十次。我無法也不能相信它。 – Dejan
@HansPassant:* duh *,我用的是x86。我知道,這是愚蠢的。我沒有想到「首選32位」是新項目的默認設置。學過的知識。你想發表你的評論作爲答案,所以我可以接受它嗎? – Dejan