在C#中,哪个`if`语句更快?

时间:2013-02-21 02:52:38

标签: c# performance bit-manipulation

哪个if语句更快,具有以下条件。看来短路会编译成更多指令然后是非短路。

bool force = false;
bool _isLoadingActual = true;
bool _isLoadingLoadCore = true;

int a = 0, b = 0;

if (force | !(_isLoadingActual | _isLoadingLoadCore))
{
    a = 1;
}

if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}

3 个答案:

答案 0 :(得分:3)

这是最快的解决方案

a = 0;
b = 0;

因为你已经知道了布尔变量值。

不认真..第二个可能更快,因为它可以短路,即如果你没有硬编码第一个布尔值为假!否则,短路似乎必须更快。

答案 1 :(得分:0)

我认为第二个代码的速度越快。

if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}

因为它是Short circuit evaluation

在上面的代码中,如果force为真,则不需要检查其余条件(!(_isLoadingActual || _isLoadingLoadCore))。

答案 2 :(得分:0)

假设您的问题是“|||中的哪一个发生短路”:

  • ||发生短路 - || Operator (C# Reference)

      

    如果第一个操作数的计算结果为false,则第二个操作符确定整个OR表达式的计算结果是true还是false。

  • |不会短路 - | Operator (C# Reference)

      

    对于bool操作数,|计算其操作数的逻辑OR;也就是说,当且仅当两个操作数均为假时,结果为false。

因此,在纯理论意义上,使用||的代码会更快,也很可能您无法衡量实际代码中差异的影响。

请注意,如果操作数的计算有副作用,则两个语句不相等(不是你的情况,因为你已经有bool变量)。