c#中的for和while循环
for (i=0 ; i<=10; i++) { .. .. } i=0; while(i<=10) { .. .. i++; }
在for和while循环中,哪一个更好,性能明智?
(更新)实际上 – 有一种情况是for
构造更有效; 在数组上循环。 只要 在条件中 使用 arr.Length
,编译器/ JIT就会对此方案进行优化:
for(int i = 0 ; i < arr.Length ; i++) { Console.WriteLine(arr[i]); // skips bounds check }
在这个非常具体的情况下,它会跳过边界检查,因为它已经知道它永远不会超出范围。 有趣的是,如果你“提升” arr.Length
尝试手动优化它,你可以防止这种情况发生:
int len = arr.Length; for(int i = 0 ; i < len ; i++) { Console.WriteLine(arr[i]); // performs bounds check }
但是,对于其他容器( List
等),提升作为手动微优化是相当合理的。
(最后更新)
无论; 无论如何,for循环被评估为引擎盖下的while循环。
例如,ECMA 334的12.3.3.9(明确赋值)指示for循环:
for ( for-initializer ; for-condition ; for-iterator ) embedded-statement
本质上是等价的(从定义赋值的角度来看(与编译器必须生成此IL的说法不完全相同)):
{ for-initializer ; while ( for-condition ) { embedded-statement ; LLoop: for-iterator ; } }
使用continue语句,将for语句转换为转换为以标签LLoop为目标的goto语句。 如果for语句中省略了for条件,那么对明确赋值的评估就好像for-condition在上面的扩展中被替换为true一样。
现在,这并不意味着编译器必须做同样的事情,但实际上它几乎......
我会说它们是相同的,你不应该做这样的微观优化。
表现将是相同的。 但是,除非您需要在循环外部访问i
变量,否则您应该使用for
循环。 这将更清洁,因为i
只在块内有范围。
程序效率来自适当的算法,良好的对象设计,智能程序架构等。
使用for循环和while循环剃一个或两个循环将永远不会使程序运行缓慢,或者程序运行缓慢。
如果您想在本节中提高程序性能,可以找到一种方法来部分展开循环(参见Duff的设备 ),或者提高循环内部的性能。
没有一个。 它们是等价的。 您可以将’for’循环视为编写while循环的更紧凑方式。
是的,它们是等效的代码片段。
上述就是C#学习教程:c#中的for和while循环分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1044492.html