【问题标题】:Which is faster - if..else or Select..case?哪个更快 - if..else 或 Select..case?
【发布时间】:2009-11-11 03:50:36
【问题描述】:

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

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

【问题讨论】:

  • 使用一种方法比另一种方法,您将获得的任何性能充其量只能是微不足道的。对于这样的事情,代码的可读性每次都胜过性能。

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


【解决方案1】:

如果您编译这两个片段并使用反射器进行反汇编,您会发现它们最终都成为几乎相同的 IL。编译器将if / else 替换为case 语句。

如果您遇到性能问题,这种微优化不太可能帮助您。

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

如果您没有性能问题,就不要再为这些东西操心了,而不必担心编写易于理解的代码。

【讨论】:

    【解决方案2】:

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

    但是,如果您担心其中哪一个运行得更快,并且它确实是您程序的瓶颈,那么您的项目表现非常出色。

    【讨论】:

      【解决方案3】:

      数据库操作将至少比if/elsecase 语句慢1,000 倍。

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

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

      【讨论】:

        【解决方案4】:

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

        把每一个操作放在一个循环中,执行10000次,记录循环前后的系统时间,结束时间减去开始时间,比较各个方法的结果。

        【讨论】:

          猜你喜欢
          • 2012-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          • 1970-01-01
          • 2011-08-11
          • 2021-09-15
          • 2018-05-21
          相关资源
          最近更新 更多