在這個線程中,我們討論了關於for loop
和foreach
的性能分析。 哪一個可以提供更好的性能 - for
或foreach
?循環和foreach的性能分析
這裏有兩種簡單的方法:
public static void TestFor()
{
Stopwatch stopwatch = Stopwatch.StartNew();
int[] myInterger = new int[1];
int total = 0;
for (int i = 0; i < myInterger.Length; i++)
{
total += myInterger[i];
}
stopwatch.Stop();
Console.WriteLine("for loop Time Elapsed={0}", stopwatch.Elapsed);
}
public static void TestForeach()
{
Stopwatch stopwatchForeach = Stopwatch.StartNew();
int[] myInterger1 = new int[1];
int totall = 0;
foreach (int i in myInterger1)
{
totall += i;
}
stopwatchForeach.Stop();
Console.WriteLine("foreach loop Time Elapsed={0}", stopwatchForeach.Elapsed);
}
然後我跑的上面的代碼的結果是foreach循環時間已= 00:00:00.0000003, for循環時間已= 00:00:00.0001462。我認爲我們需要高性能的代碼。我們將使用foreach
在for循環中,您應該在'for'語句之外存儲'myInteger.Length'以獲得更好的性能。否則,它將不得不查詢每次迭代的數組長度。 – ryan 2013-03-17 14:58:49
您是否在'TestFor'和'TestForeach'調用之間調用'GC.Collect'?我認爲第一次測試可能會影響第二次垃圾回收的結果。 – user20140268 2013-03-17 15:05:36
任何沒有運行的性能測試都會導致時間測量長達數秒(如果不是幾分鐘),這種迭代計數是可疑的。你太可怕了,可能會增加幾十分之一秒的誤會,相信任何性能測試的整體運行時間不到5秒鐘。 – 2013-03-17 16:09:34