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

Red*_*ils 6 database vb.net if-statement switch-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
Run Code Online (Sandbox Code Playgroud)

Select Case var
   Case 1
      Command for updating database
   Case 2
      Command for updating database
   Case 3
      Command for updating database
End Select
Run Code Online (Sandbox Code Playgroud)

Ham*_*ith 13

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

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

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

如果您没有性能问题,请停止冒汗,并担心编写易于理解的代码.


war*_*ren 10

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

但是,如果您担心哪些运行速度更快,并且它确实是您程序中的瓶颈,那么您就拥有了一个非常好的项目.


bri*_*gge 8

数据库操作将比if/elseor case语句慢至少1000倍.

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

MSIL具有用于switch语句的特定OpCode.人们必须反编译为MSIL以查看VB.Net是否会为三个项目创建跳转表.


Asa*_*aph 5

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

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