如果vs Case语句

时间:2009-12-22 14:27:49

标签: performance conditional

在处理多个条件时使用if-else和case语句之间是否存在性能差异?

哪个更受欢迎?

7 个答案:

答案 0 :(得分:27)

在某些语言中,如{C switch可能更快,因为它通常使用jump table实现。不过,现代编译器有时也很聪明,可以使用一个if

无论如何它可能无关紧要,微观优化(几乎)永远不会有用。

答案 1 :(得分:25)

使用在给定上下文中最具可读性的那个。

答案 2 :(得分:7)

如果您有多个ifelse,我建议切换/选择。然而,它并不总是有效。

假设你有类似的东西(不推荐但仅举例)

If a > 0 and b > 0 then

' blabla
ElseIf b = -5 then

' blabla2
ElseIf a = -3 and b = 6 then

End If

使用开关/选择不是要走的路。但是,在查询像这样的变量的特定值时

select case a

        case 1:
           ' blabla
        case 2:
           ' blabla2
        case 3:
           ' blabla3
        case 4:
           ' blabla4
        case else:
end select

在这种情况下,我强烈推荐它,因为它对其他人来说更具可读性。

答案 3 :(得分:5)

某些编程语言限制何时可以使用switch / case语句。例如,在许多类C语言中,case值必须是编译时已知的常量整数。

两种技术的性能特征可能不同,但您不太可能提前预测它们是什么。如果性能对您应用程序中的此代码至关重要,请确保在决定之前配置文件两种方法,因为答案可能会让您感到惊讶。

通常,性能差异可以忽略不计,因此您应该选择最易读,易懂和可维护的代码,就像在任何其他编程环境中一样。

答案 4 :(得分:3)

caseswitch语句实际上只是“if ... elseif ...”结构的特殊情况,当同一个对象与每个分支中的不同简单值进行比较时,您可以使用这些结构,就是这一切。使用它们的好处是大多数编译器都可以将它们实现为跳转表,因此有效地将整个200(或多个)分支检查实现为单个表索引操作和跳转。

因此,您希望在

时使用case语句
  1. 可以
  2. 拥有相当多的分支机构。
  3. “elseif”的数量越大,case语句越有吸引力。

答案 5 :(得分:3)

为了便于阅读,通常首选案例陈述,如果存在任何速度差异,则通常会更快,但这并不适用于所有可能的环境。

您可能编写一个测试,显示哪个更适合您的环境,但请注意缓存和编译器优化。

答案 6 :(得分:0)

我将在这里添加一些答案。这不是一个性能问题,如果你真的关心性能......写一个测试,看看哪个更快。

然而,这应该是一个关于哪个是适当使用的问题,而不是哪个更好。如果您有多个if / else语句,请自己帮个忙并使用case语句。如果是简单的if / else则使用if / else。你以后会感谢自己。