...如果以下代码,则使用多个if
if(condition1) return false;
if(condition2) return false;
if(condition3) return false;
...
像下面的代码一样,比使用||运算符更快/更有效吗?
if(condition1 || condition2 || condition3 || ...) return false;
我正在研究Microsoft的C#字符串实现的参考源,发现了一段有趣的代码,我不完全理解。 (我删除了不必要的代码和一些注释,有关完整代码,请参见https://referencesource.microsoft.com/#mscorlib/system/string.cs)
在这里,我发现上面的构造使用多个if块而不是||运算符。基于这种代码经过高度优化的假设,我想知道为什么要这么做。
private unsafe static bool EqualsHelper(String strA, String strB)
{
int length = strA.Length;
fixed(char * ap = & strA.m_firstChar) fixed(char * bp = & strB.m_firstChar)
{
char * a = ap;
char * b = bp;
while (length >= 10)
{
if ( * (int * ) a != * (int * ) b) return false;
if ( * (int * ) (a + 2) != * (int * ) (b + 2)) return false;
if ( * (int * ) (a + 4) != * (int * ) (b + 4)) return false;
if ( * (int * ) (a + 6) != * (int * ) (b + 6)) return false;
if ( * (int * ) (a + 8) != * (int * ) (b + 8)) return false;
a += 10;
b += 10;
length -= 10;
}
while (length > 0)
{
if ( * (int * ) a != * (int * ) b) break;
a += 2;
b += 2;
length -= 2;
}
return (length <= 0);
}
}
我怀疑这可能与分支预测优化有关,或者仅仅是一种不同的编码风格,并且对性能没有任何影响。还是完全其他?