如果比||运算符更好,则为倍数

时间:2019-07-07 17:36:11

标签: c# string reference-source

我的问题是...

...如果以下代码,则使用多个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);
    }
}

我怀疑这可能与分支预测优化有关,或者仅仅是一种不同的编码风格,并且对性能没有任何影响。还是完全其他?

0 个答案:

没有答案