在这个线程中,我们讨论了关于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