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
这显然取决于特定语言的解释器/编译器的特定实现.
也就是说,从理论上讲,任何理智的实现都可能能够实现另一个实现一个,如果它更快,那么差异最多可以忽略不计.
当然,我的假设while
和for
行为与他们在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)
小智 6
我发现最快的循环是反向循环,例如:
var i = myArray.length;
while(i--){
// Do something
}
Run Code Online (Sandbox Code Playgroud)
就像其他人所说的那样,任何值得赞扬的编译器都将生成几乎相同的代码。性能上的任何差异都可以忽略不计-您在进行微优化。
真正的问题是,什么更具可读性?这就是for
循环(至少恕我直言)。
归档时间: |
|
查看次数: |
92549 次 |
最近记录: |