2009-12-22 45 views
13

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

哪个是首选?

+12

这是非常依赖于语言的switch/case语句在不同语言中的工作方式不同 - 例如,在某些语言中,您可以切换一个字符串,而在另一些语言中则不能。 – 2009-12-22 14:31:00

回答

25

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

+0

感谢你们大家的回答对于使用if和case语句非常有用 – fealin 2009-12-23 08:57:36

+0

虽然我会同意 - 这并没有真正回答这个问题。问题是关于性能优势。 – 2014-01-15 13:22:24

+1

这个问题在这个答案之后被重写,重点转移了很多。 – 2014-01-15 16:11:48

27

在某些语言中,如C,switch可能会更快,因为它通常使用jump table实现。尽管如此,现代编译器有时足够聪明,可以使用几个if

无论如何,它可能无所谓,微型优化(几乎)是没有用的。

5

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

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

通常情况下,性能差异可以忽略不计,因此,你应该选择最易读,易懂,易维护代码,你应该在几乎任何其他节目的情况。

7

当你有多个ifelse时,我推荐switch/select。然后再次,它不总是工作。

假设你类似的东西(不推荐,但例如只)

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 

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

0

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

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

3

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

出于这个原因,你想使用一个case语句时,你

  1. 可以
  2. 有相当大数量的分支。

“elseif”的数量越大,说明就越有吸引力。

3

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

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