我想弄清楚for循環是否比foreach循環更快,並使用System.Diagnostics類來定時執行任務。在運行測試時,我發現首先總是執行的循環比最後一個慢。有人可以告訴我爲什麼會發生這種情況嗎?我的代碼如下:爲什麼第二個for循環總是比第一個執行得更快?
using System;
using System.Diagnostics;
namespace cool {
class Program {
static void Main(string[] args) {
int[] x = new int[] { 3, 6, 9, 12 };
int[] y = new int[] { 3, 6, 9, 12 };
DateTime startTime = DateTime.Now;
for (int i = 0; i < 4; i++) {
Console.WriteLine(x[i]);
}
TimeSpan elapsedTime = DateTime.Now - startTime;
DateTime startTime2 = DateTime.Now;
foreach (var item in y) {
Console.WriteLine(item);
}
TimeSpan elapsedTime2 = DateTime.Now - startTime2;
Console.WriteLine("\nSummary");
Console.WriteLine("--------------------------\n");
Console.WriteLine("for:\t{0}\nforeach:\t{1}", elapsedTime, elapsedTime2);
Console.ReadKey();
}
}
}
這裏是輸出:
for: 00:00:00.0175781
foreach: 00:00:00.0009766
只是一個快速注:當你計時的東西來確定相對執行時間,不輸出任何東西(WriteLine())。執行WriteLine()所花費的時間可能比您要測試的時間長數千倍(至數百萬倍),因此您失去了所有準確性。此外,你需要超過四(4)次迭代纔有意義。嘗試成千上萬(甚至數百萬)。 – 2009-06-20 14:53:36
您的問題只有一個真正的答案:您的基準嚴重瑕疵。人們提到的其他觀點是真實的,但這不是你得到這個結果的原因。 – 2009-06-20 15:01:09
如果您先執行foreach循環,它會說什麼? – 2009-06-20 16:09:50