将IF语句转换为简单语句 - 哪一个有效?

时间:2012-09-04 09:35:17

标签: c#

我希望大家都喜欢读这篇文章。

我在下面有两个IF语句

public int GetTax(Item item)
{
   int tax=0;
   if(item.Name.Equals("Book"))
   {
      tax = 10;
   }
   if(item.Imported)
   {
      tax += 5;
   }
   return tax;
}

我已将上述条件转换为此条件。

public int GetTax(Item item)
{
     return 5 * ((int)item.Name.Equals("Book") * 2 + ((int)item.Imported));
}

您认为哪一个有效?并证明为什么?

1 个答案:

答案 0 :(得分:1)

如果从字面上编译第二种方法更有效,因为没有分支。

每当有分支时,都会有一些分支预测,可能会错过,从而导致CPU重新执行机器指令。

话虽如此,根据编译器的不同,您编写的内容可能非常简单,可以优化为等效代码。这取决于您调用的返回类型。如果返回类型是布尔值,则它们是等效的。

但是,例如,如果item.Imported实际上是整数类型,那么您给出的两个示例并不等效,并且编译器可能无法将两者编译为相同的内容。

因为优化非常依赖于编译器。如果最小化运行时很重要,那么您只能确定基准代码。