哪个更快 - if..else或Select..case?

时间:2009-11-11 03:50:37

标签: database vb.net switch-statement if-statement

我有三个条件要比较。哪两个在以下两个之间更快?请指出我。谢谢大家!

If var = 1 then
    Command for updating database
ElseIf var = 2 then
    Command for updating database
ElseIf var = 3 then
    Command for updating database
EndIf

Select Case var
   Case 1
      Command for updating database
   Case 2
      Command for updating database
   Case 3
      Command for updating database
End Select

4 个答案:

答案 0 :(得分:13)

如果您编译这两个片段并使用反射器进行反汇编,您将看到它们最终都与IL实际上相同。编译器将if / else替换为case语句。

如果遇到性能问题,这种微优化很可能无法帮助您。

如果您遇到性能问题,那么您需要对程序进行概要分析并找出瓶颈所在。

如果您没有遇到性能问题,请不要再出汗,并担心编写易于理解的代码。

答案 1 :(得分:10)

理论上,switch..case 应该更快,因为它是一个查找表(通常由编译器实现)。

但是,如果您担心哪些运行速度更快,而且确实是您计划中的瓶颈,那么您的项目就会非常出色。

答案 2 :(得分:8)

数据库操作的速度至少比if/elsecase语句慢1000倍。

通常,case语句可以更快地执行,因为编译器或运行时可以构建跳转表。通常,对于少于五个项目,编译器会将case语句编写为if / else语句列表。如果上面的性能是可测量的,我猜测性能将是相同的,因为可能正在执行相同的指令。

MSIL有一个特定的OpCode for switch语句。人们不得不反编译成MSIL,看看VB.Net是否会为三个项目创建一个跳转表。

答案 3 :(得分:4)

最终回答此类问题的最佳方法是使用基准。

将每个操作放在执行10,000次的循环中,记录循环前后的系统时间,从结束时间中减去开始时间并比较每种方法的结果。