对于每纳秒数十亿次的静态方法,其中哪一种会更快:
方法1:
static bool DualConditional(int value)
{
return A(value) && B(value);
}
方法2:
static bool DualConditional(int value)
{
if(!A(value)
return false;
if(!B(value)
return false;
}
答案 0 :(得分:7)
他们应该都是一样的。
如果A()为假,第一个会短路并返回。
第一个也更容易阅读和理解。即使性能稍差,我也会使用此代码。当牺牲可读性时,过早的微优化是毫无价值的。
答案 1 :(得分:2)
&&
短路,这意味着只有在左侧通过时才评估右侧,在这种情况下。是的,
return A(value) && B(value);
是
的粗略等价物if (A(value))
if (B(value))
return true;
return false;
答案 2 :(得分:2)
C#编译器会将Method1转换为 方法2自动
没有
如果A()为假,则跳过B()?
是
一般来说,代码如
return A(value) && B(value);
快于
if(!A(value)
return false;
if(!B(value)
return false;
因为第一个变体可以转换为不使用跳转的x86代码。
例如在代码中:
private static bool B_1(int value)
{
return value < 5;
}
private static bool B_2(int value)
{
if (value < 5)
return true;
else
return false;
}
对于B_1,C#生成的x86代码比B_2稍快一些。
在这种特殊情况下,我会说它取决于A()和B()。我会在分析器下运行它以查看哪个更快。