Sup*_*dge 0 c# methods conditional loops
如果我有一个for循环的例子,并且我想使用类似Math.round()的东西来舍入数字,但我只需要将数字四舍五入(即数字在整个循环中没有变化)是否更好将它存储到变量中,然后在条件中使用变量或者无关紧要?
for (int i = 0;i < Math.Round(x);i++)
{
//Some code
}
Run Code Online (Sandbox Code Playgroud)
VS
for (int i = 0,roundedX = Math.Round(X); i<roundedX;i++)
{
//Some code
}
Run Code Online (Sandbox Code Playgroud)
编译器将在每次循环迭代时评估终止条件.
如果编译器和JITter 认为它是不变的,那么它可能会在循环外部提升某个表达式或部分表达式,这意味着它不会改变.然而,这通常只用更简单的表达式来完成.
如果Math.Round(X)表达式可以在没有实际方法调用的情况下完成,那么也许在这种特殊情况下,舍入将在每次循环迭代时发生.
因此,如果您在性能问题上处于最后防线,您可以考虑将其移出并转换为变量:
int goal = (int)Math.Round(X);
for (int i = 0; i < goal; i++)
...
Run Code Online (Sandbox Code Playgroud)
因为这只会调用Math.Round一次方法,所以只能获得一次性能.
请注意,如果将X更改作为循环的一部分,那么显然您希望保留原始代码.