-3

在这个线程中,我们讨论了for loop和的性能分析foreach。哪一个提供更好的性能- foror 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 循环 Time Elapsed=00:00:00.0000003,for loop Time Elapsed= 00:00:00.0001462。我认为我们需要高性能代码。我们将使用 foreach

4

1 回答 1

1

我的决定不会基于像这样的一些简单的性能循环。我假设您经常使用循环/大型数据集。在我们开始讨论数十万次(至少)的迭代之前,您不会注意到差异。

1) 如果您正在编写具有潜在内存压力框架(XBOX、Windows Phone、Silverlight)的应用程序。我会使用 for 循环,因为 foreach 可以留下轻量级的“垃圾”,可以留下用于收集。几年前我为游戏进行 XBOX 开发时,一个常见的技巧是使用 for 循环初始化屏幕上显示的固定项目数组并将其保存在内存中,然后您不必担心垃圾收集/内存调整/garbage collection 等。如果您有这样的循环称为 60+ 次/秒(即游戏),这可能是一个问题

2)如果您有一个非常大的集合,您正在迭代并且性能是您的关键决策驱动因素(请记住,除非它们很大,否则这些数字不会引起注意),那么您可能需要考虑并行化您的代码。那么差异可能不在于 vs foreach,而是 Parallel.For vs Parallel.Foreach vs PLINQ(AsParallel() 方法)。你有不同的线程来解决这个问题。

编辑:在生产应用程序中,您很可能在循环中有某种逻辑,这将花费 >>> 时间来迭代一个项目。一旦将其添加到混合性能驱动程序中,通常会转移到不优化迭代的实际逻辑(编译器做得很好)。

于 2013-03-17T15:15:02.263 回答