我想弄清楚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