我有一个小疑问
我有以下代码
bool res= false;
if(cond1)
{
res = true;
}
if(cond2)
{
res = true;
}
如果我放下以下代码
,而不是这个if(cond1 || cond2)
{
res = true;
}
哪个代码段会更优化?
我相信它会是第二个因为我避免了If条件。
答案 0 :(得分:9)
好吧,我不知道它是否合适但是:在这种情况下它不是重要。
不要过多micro-optimizing。
但要回答你的问题,坚持使用可读的问题。
最快的解决方案是这样的:
bool res = cond1 || cond2;
答案 1 :(得分:8)
这是微优化。选择一个更具可读性的那个:
return cond1 || cond2;
答案 2 :(得分:4)
性能增益真的不明显,但第二个比第一个更具可读性和逻辑性。
答案 3 :(得分:4)
唯一的区别是cond1为真的情况 - 所以在第二个例子中,cond2将不会被测试。 如果cond1为false,将在两种情况下测试cond2。
答案 4 :(得分:1)
太糟糕了,不是每个人都能看到Or(|)和Condional Or(||)之间的区别。如果在第二个片段中使用了Or,则没有差异(两个条件都被评估)。 使用条件或,表示如果第一个条件(从左到右)为真,则下一个条件甚至不被评估。
这是一个非常有用的功能。
答案 5 :(得分:0)
第二个选项更加优化。 在第一个选项中,它将始终检查cond2。 如果在option1中,你可以改变第二个if to else来优化它。
答案 6 :(得分:0)
这里的性能差异不会很明显。但绝对是第二个更好。
1)第二次的可读性更好。
2)第二个片段比第一个片段更符合逻辑。
3)如果我们看到IL
带有ILDASM
,那么第一个代码段的汇编行数将多于第二个代码段的行数。因此,代码大小更适用于第一个代码段。如果组件的尺寸较小,那就更好了。
答案 7 :(得分:0)
如果cond1
和cond2
不是简单的布尔值,而是具有副作用的属性或函数,则会有所不同,因为在第一个版本中cond2
将始终进行评估,并且因此会产生影响。
答案 8 :(得分:0)
假设每个cond
几乎同样可能为假,并且假设每个cond
占用一个STU(重要时间单位),那么||
将占用1个STU的一半时间和STU的一半时间,总体预期为1.5 STU而不是2。
如果STU是纳秒,那可能无关紧要。
如果STU是一个世纪,它可能会。