哪个循环更快,而对于?

Mar*_*lor 34 performance for-loop while-loop

您可以使用for和while循环获得相同的输出:

而:

$i = 0;
while ($i <= 10){
  print $i."\n";
  $i++;
};
Run Code Online (Sandbox Code Playgroud)

对于:

for ($i = 0; $i <= 10; $i++){
  print $i."\n";
}
Run Code Online (Sandbox Code Playgroud)

但哪一个更快?

Meh*_*ari 22

这显然取决于特定语言的解释器/编译器的特定实现.

也就是说,从理论上讲,任何理智的实现都可能能够实现另一个实现一个,如果它更快,那么差异最多可以忽略不计.

当然,我的假设whilefor行为与他们在C和类似语言中的行为一样.你可以为while和创建一个语义完全不同的语言for


Sha*_*ane 13

在C#中,For循环稍快一些.

对于环路平均约2.95至3.02毫秒.

While循环的平均值约为3.05至3.37毫秒.

快速小控制台应用程序来证明:

 class Program
    {
        static void Main(string[] args)
        {
            int max = 1000000000;
            Stopwatch stopWatch = new Stopwatch();

            if (args.Length == 1 && args[0].ToString() == "While")
            {
                Console.WriteLine("While Loop: ");
                stopWatch.Start();
                WhileLoop(max);
                stopWatch.Stop();
                DisplayElapsedTime(stopWatch.Elapsed);
            }
            else
            {
                Console.WriteLine("For Loop: ");
                stopWatch.Start();
                ForLoop(max);
                stopWatch.Stop();
                DisplayElapsedTime(stopWatch.Elapsed);
            }
        }

        private static void WhileLoop(int max)
        {
            int i = 0;
            while (i <= max)
            {
                //Console.WriteLine(i);
                i++;
            };
        }

        private static void ForLoop(int max)
        {
            for (int i = 0; i <= max; i++)
            {
                //Console.WriteLine(i);
            }
        }

        private static void DisplayElapsedTime(TimeSpan ts)
        {
            // Format and display the TimeSpan value.
            string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                ts.Hours, ts.Minutes, ts.Seconds,
                ts.Milliseconds / 10);
            Console.WriteLine(elapsedTime, "RunTime");
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 哪个更快取决于您要迭代的内容。[这里是对多种对象(例如 DataRows 和自定义对象,还包括While 循环结构的性能,而不仅仅是 for 和 foreach 结构的性能。 (2认同)

小智 6

我发现最快的循环是反向循环,例如:

var i = myArray.length;
while(i--){
  // Do something
}
Run Code Online (Sandbox Code Playgroud)


Ail*_*lyn 5

就像其他人所说的那样,任何值得赞扬的编译器都将生成几乎相同的代码。性能上的任何差异都可以忽略不计-您在进行微优化。

真正的问题是,什么更具可读性?这就是for循环(至少恕我直言)。


Ili*_*nov 5

至于无限循环,循环比每次条件都进行计算for(;;)要好,但它又取决于编译器。while(1)while