English 中文(简体)
Which is faster - if..else or Select..case?
原标题:

I have three condition to compare. Which one is more faster between the following two? Please point me out. Thanks all!

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

and

Select Case var
   Case 1
      Command for updating database
   Case 2
      Command for updating database
   Case 3
      Command for updating database
End Select
最佳回答

If you compile the two fragments and use reflector to disassemble you will see that they both end up as the practically the same IL. The compiler replaces the if / else with case statement.

This kind of micro optimization is highly unlikely to help you if you have performance problems.

If you have performance problems then you need to profile the program and find out where the bottlenecks are.

If you don t have performance problems, stop sweating this stuff and worry about writing code that is easily understood.

问题回答

Theoretically, a switch..case should be faster, because it s a lookup table (as most often implemented by the compiler).

However, if you re worried about which of these runs faster, and it s really the bottleneck in your program, you have a phenomenally-well-behaved project.

A database operation will be at least 1,000 times slower than the if/else or case statement.

In general, case statements can execute faster, as the compiler or runtime can build a jump table. Usually, for less than five items, a compiler will write a case statement as a list of if/else statements. If the performance of the above was measurable, I would guess the performance would be identical, as likely the same instructions are being executed.

MSIL has a specific OpCode for switch statements. One would have to decompile to MSIL to see if VB.Net would create a jump table for three items.

The best way to answer this type of questions conclusively is with a benchmark.

Put each of the operations in a loop that executes 10,000 times, record the system time before and after the loop, subtract the start time from the end time and compare the results of each method.





相关问题
what is wrong with this mysql code

$db_user="root"; $db_host="localhost"; $db_password="root"; $db_name = "fayer"; $conn = mysqli_connect($db_host,$db_user,$db_password,$db_name) or die ("couldn t connect to server"); // perform query ...

Users asking for denormalized database

I am in the early stages of developing a database-driven system and the largest part of the system revolves around an inheritance type of relationship. There is a parent entity with about 10 columns ...

Easiest way to deal with sample data in Java web apps?

I m writing a Java web app in my free time to learn more about development. I m using the Stripes framework and eventually intend to use hibernate and MySQL For the moment, whilst creating the pages ...

join across databases with nhibernate

I am trying to join two tables that reside in two different databases. Every time, I try to join I get the following error: An association from the table xxx refers to an unmapped class. If the ...

How can I know if such value exists in database? (ADO.NET)

For example, I have a table, and there is a column named Tags . I want to know if value programming exists in this column. How can I do this in ADO.NET? I did this: OleDbCommand cmd = new ...

Convert date to string upon saving a doctrine record

I m trying to migrate one of my PHP projects to Doctrine. I ve never used it before so there are a few things I don t understand. In my current code, I have a class similar to this: class ...

热门标签