C#双重条件性能

时间:2010-10-14 17:12:54

标签: c# performance conditional

对于每纳秒数十亿次的静态方法,其中哪一种会更快:

方法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;
}

3 个答案:

答案 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()。我会在分析器下运行它以查看哪个更快。