哪个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;
}
答案 0 :(得分:3)
这是最快的解决方案
a = 0;
b = 0;
因为你已经知道了布尔变量值。
不认真..第二个可能更快,因为它可以短路,即如果你没有硬编码第一个布尔值为假!否则,短路似乎必须更快。
答案 1 :(得分:0)
我认为第二个代码的速度越快。
if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
b = 1;
}
在上面的代码中,如果force
为真,则不需要检查其余条件(!(_isLoadingActual || _isLoadingLoadCore)
)。
答案 2 :(得分:0)
假设您的问题是“|
或||
中的哪一个发生短路”:
||
发生短路 - || Operator (C# Reference)
如果第一个操作数的计算结果为false,则第二个操作符确定整个OR表达式的计算结果是true还是false。
|
不会短路 - | Operator (C# Reference)
对于bool操作数,|计算其操作数的逻辑OR;也就是说,当且仅当两个操作数均为假时,结果为false。
因此,在纯理论意义上,使用||
的代码会更快,也很可能您无法衡量实际代码中差异的影响。
请注意,如果操作数的计算有副作用,则两个语句不相等(不是你的情况,因为你已经有bool变量)。