我有一个简单的循环来计算两个数字的 hcf 以抵消分数。
我想知道 while 条件中的三元表达式是否在每个循环中都重新计算,因此应该在之前计算一次并存储为性能目的的变量?
public Fraction LowestForm()
{
int hcf = 1;
int counter =2;
while (counter <= (Numerator < Denominator ? Numerator : Denominator))
{
if (Numerator % counter == 0 && Denominator % counter == 0)
{
hcf = counter;
}
counter++;
}
return new Fraction(Numerator / hcf, Denominator / hcf);
}
澄清一下:我主要关心 Rosylyn 编译器
最佳答案
实际上这取决于。如果任何表达式(或任何子表达式,子表达式的特定类型不重要并且子表达式的位置,即在循环条件中或循环体内也不重要)不依赖于在中修改的变量循环,可以移出循环并只计算一次,优化器将执行此操作。 C# 有非常好的优化器。
在调试版本中,不会优化任何内容。每个表达式都将被重新计算。
作为首要任务,我会建议提高代码的清晰度和可读性。除此之外,尽量减少开发工作代码的时间。您只需要在关键代码段或当您发现优化器由于某种原因没有做好工作时,才需要帮助优化器。很少,但有时会发生。
关于c# - while语句中的三元表达式在每个循环中都被评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41472987/