两个如果条件或一个如果与OR

时间:2010-05-31 05:57:08

标签: c# .net optimization

我有一个小疑问

我有以下代码

bool res= false;
if(cond1)
{
   res = true;
}

if(cond2)
{
   res = true;
}

如果我放下以下代码

,而不是这个
if(cond1 || cond2)
{
   res = true;
}

哪个代码段会更优化?

我相信它会是第二个因为我避免了If条件。

9 个答案:

答案 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)

如果cond1cond2不是简单的布尔值,而是具有副作用的属性或函数,则会有所不同,因为在第一个版本中cond2将始终进行评估,并且因此会产生影响。

答案 8 :(得分:0)

假设每个cond几乎同样可能为假,并且假设每个cond占用一个STU(重要时间单位),那么||将占用1个STU的一半时间和STU的一半时间,总体预期为1.5 STU而不是2。

如果STU是纳秒,那可能无关紧要。

如果STU是一个世纪,它可能会。