“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