在循环条件中使用数学 class 方法是否很慢?

Is using a math class method in a loop condition slow?

例如,如果我有一个 for 循环,并且我想使用 Math.round() 之类的东西来舍入数字,但我只需要将数字舍入一次(即数字不会改变在整个循环中)将它存储到一个变量中,然后在条件中使用该变量更好还是无所谓?

 for (int i = 0;i < Math.Round(x);i++)
   {
   //Some code  
   }

 for (int i = 0,roundedX = Math.Round(X); i<roundedX;i++)
  {  
  //Some code 
  }

编译器将在每次循环迭代时评估终止条件。

编译器和 JITter 可能 将某些表达式或表达式的一部分提升到循环外,如果它认为它是不变的,这意味着它不会改变。然而,这通常只用更简单的表达式来完成。

如果 Math.Round(X) 表达式可以在没有实际方法调用的情况下完成,那么 可能 但在这种特殊情况下,舍入将在每次循环迭代时发生。

因此,如果您最终是性能问题的防线,您可以考虑将其移出并放入变量中:

int goal = (int)Math.Round(X);
for (int i = 0; i < goal; i++)
    ...

由于这只会调用 Math.Round 方法一次,因此您只会受到一次性能影响。

请注意,如果 X 更改 作为循环的一部分 ,那么显然您想保留原始代码。

我建议定义一个变量

 var roundedX = Math.Round(X);
 for (int i = 0; i < roundedX; i++)
 {  
    //Some code 
 }