【问题标题】:in a "for" loop, is the Terminating Condition Re-Evaluated on Each Iteration? [duplicate]在“for”循环中,是否在每次迭代时重新评估终止条件? [复制]
【发布时间】:2011-07-26 22:59:04
【问题描述】:

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

例如

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

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

编译器是否聪明到可以优化它?

while 呢?

【问题讨论】:

  • @CodeNaked 那是Java,不能保证C#的工作方式是一样的
  • 这一定不能像你期望的那样优化!所以,是的,编译器足够聪明......知道它必须保持原样。
  • @Oskar - 你是对的。那么大概就是这个stackoverflow.com/questions/4477296/…
  • @CodeNaked true,也投票关闭

标签: c#


【解决方案1】:

不,编译器不够聪明,无法对其进行优化,因为它不能保证complicated() 在多次运行时不会做任何不同的事情。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 或者只是complicated()方法中的一个断点,然后看看它发生
    • 哦,是的,只是Debugger.Break();
    • 或者一个简单的控制台应用测试将包括一个Console.WriteLine("The complicated method wrote this line");
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        相关资源
        最近更新 更多