“else if”比“switch()case”更快吗?

可能重复:
在C#中使用if / else和switch-case之间有什么显着差异?

我是一名前Pascal家伙,目前正在学习C#。 我的问题如下:

下面的代码比开关更快吗?

int a = 5;

if (a == 1)
{
    ....
}
else if(a == 2)
{
    ....
}
else if(a == 3)
{
    ....
}
else if(a == 4)
{
    ....
}
else
    ....

而开关:

int a = 5;

switch(a)
{
    case 1:
        ...
        break;

    case 2:
        ...
        break;

    case 3:
        ...
        break;

    case 4:
        ...
        break;

    default:
        ...
        break;


}

哪一个更快?

我在问,因为我的程序有类似的结构(许多“许多”,如果“的声明)。 我应该把它们变成开关吗?


对于少数项目,差异很小。 如果你有很多项目,你应该使用开关。

如果交换机包含五个以上的项目,则使用查找表或哈希列表来实现。 这意味着所有项目都获得相同的访问时间,与if:s列表相比,最后一项需要更多时间才能达到,因为它必须首先评估每个先前的条件。


你为什么在乎?

99.99%的时间,你不应该在意。

这些微型优化不太可能影响代码的性能。

另外,如果您需要关心,那么您应该对代码进行性能分析。 在这种情况下,查找switch case与if-else块之间的性能差异将是微不足道的。

编辑:为了清晰起见:实施任何设计更清晰,更易于维护的设计。 一般来说,当遇到一个巨大的switch-case或if-else块时,解决方案就是使用多态。 找到正在改变的行为并封装它。 我不得不面对这样巨大的,难看的开关案例代码,通常这并不难以简化。 但是如此令人满意。


相信这种性能评估,开关盒更快。

这是结论:

结果显示switch语句比if-else-if梯形图执行速度快。 这是由于编译器能够优化switch语句。 对于if-else-if梯形图,代码必须按照程序员确定的顺序处理每个if语句。 但是,由于switch语句中的每个案例都不依赖于早期的情况,因此编译器能够以提供最快执行的方式重新排序测试。

链接地址: http://www.djcxy.com/p/42713.html

上一篇: Is "else if" faster than "switch() case"?

下一篇: how to write if and else in a single line in python