在“for”循环中,是否在每次迭代时重新评估终止条件?

时间:2011-07-26 22:59:05

标签: c#

  

可能重复:
  for loop optimization
  for-loop optimization - needed or not?

e.g。

  int maxloop = complicated();
   for (int i=0;i<maxloop;i++){}

 for (int i=0;i<complicated();i++){}

编译器是否足够智能来优化它?

while怎么办?

4 个答案:

答案 0 :(得分:2)

不,编译器不够聪明,无法对其进行优化,因为如果complicated()多次运行,{{1}}不会保证不会做任何不同的事情。

答案 1 :(得分:1)

实际上,您需要将输出分配给变量以避免重新计算开销。编译器不会这样做,因为您的目标可能是将方法返回值作为限制(即,您可能需要在每次迭代后重新计算限制)。要对此进行测试,只需将Thread.Sleep(5000);放入compilcated()方法,您就会看到等待时间。

答案 2 :(得分:0)

不,不是,因为complicated可能是一种取决于其他复杂方法的方法,或者在每次迭代后导致不同的行为。

答案 3 :(得分:0)

编译器无法对其进行优化,因为在某些情况下“complex()”不会每次都返回相同的整数。因此,每次都执行该条件。您的第一段代码必须更高效。