提问人:Tanvi Khade 提问时间:4/15/2023 更新时间:4/15/2023 访问量:52
While Loop vs Modulus 算子 [已关闭]
While Loop vs Modulus operator [closed]
问:
我有两个程序执行相同的任务,即计算两个数字的最小公倍数 (LCM)。第一个程序包含一个 while 循环输出,执行第二个程序。
计划1:
temp1 = firstNumber;
temp2 = secondNumber;
while (firstNumber != secondNumber)
{
if (firstNumber > secondNumber)
{
firstNumber -= secondNumber;
}
else
{
secondNumber -= firstNumber;
}
}
lcm = (temp1 * temp2) / firstNumber;
计划2:
int f =1;
//int f = firstNumber > secondNumber? (firstNumber%secondNumber == 0 ? secondNumber : 1) : (secondNumber%firstNumber == 0 ? firstNumber : 1);
if(firstNumber > secondNumber)
{
if( firstNumber%secondNumber == 0)
f = secondNumber;
}
else{
if(secondNumber%firstNumber ==0)
f = firstNumber;
}
lcm = (firstNumber*secondNumber)/f;
两个程序的输入均为:1513,3
我以为随着两个数字之间差异的增加,第一个程序将花费更长的时间,但事实似乎并非如此。
第一个程序比第二个程序表现更好的原因是什么?
附言。我不是第一个程序的作者。
答:
1赞
Tarazed
4/15/2023
#1
样本量不够大,无法得出性能结论。在代码执行过程中,可能会发生许多事情。
由于 C# 依赖于运行时,因此它执行许多可能影响性能的操作(最明显的是垃圾回收器)。即使多次运行同一程序也会有所不同。
这也是为什么你从不相信 .Net 计时器是准确的,有很多计时器选项,没有一个可以准确地计算时间。确定某物运行时间的最准确方法是在起点和终点创建两个时间戳并减去它们。
为了获得准确的基准测试,您需要平均多次运行的运行时间。
我想分享的另一件事是,很少需要对这种琐碎的代码进行性能微优化。写下让它更容易阅读的东西,不要试图从中榨取每一毫秒。大型循环任务可以按照识别的方式进行优化,但像这样的基本计算最终不会产生任何影响。
评论