2009-11-11 4 views
5

Mam trzy warunki do porównania. Który z nich jest szybszy między następującymi dwoma? Proszę wskazać mi. Dziękuje wszystkim!Który jest szybszy - jeśli ... else lub Wybierz .. case?

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 

i

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

Każde przedstawienie, które zdobędziesz, będzie w najlepszym przypadku marginalne, z jednym podejściem nad drugim. Czytelność kodu pod każdym względem wpływa na wydajność. – JohnFx

Odpowiedz

12

Jeśli skompilujesz dwa fragmenty i użyjesz reflektora do demontażu, zobaczysz, że oba kończą się jako praktycznie ta sama IL. Kompilator zastępuje instrukcję if/else z.

Ten rodzaj optymalizacji mikro jest mało prawdopodobne, aby pomóc, jeśli masz problemy z wydajnością.

Jeśli masz problemy z wydajnością, musisz profilować program i dowiedzieć się, gdzie znajdują się wąskie gardła.

Jeśli nie masz problemów z wydajnością, przestań się pocić i martw się o pisanie kodu, który jest łatwy do zrozumienia.

8

Operacja bazy danych będzie wynosić co najmniej 1000 razy wolniej niż rachunku if/else lub case.

Ogólnie rzecz biorąc, instrukcje case mogą być wykonywane szybciej, ponieważ kompilator lub środowisko wykonawcze może zbudować tabelę przeskoku. Zwykle dla mniej niż pięciu elementów kompilator zapisze instrukcję case jako listę instrukcji if/else. Gdyby powyższe wyniki były mierzalne, zgaduję, że wydajność byłaby identyczna, ponieważ prawdopodobnie te same instrukcje są wykonywane.

MSIL ma określone instrukcje OpCode for switch. Trzeba by było dekompilować do MSIL, aby sprawdzić, czy VB.Net utworzy tabelę skoku dla trzech elementów.

10

Teoretycznie, powinno być ono szybsze, ponieważ jest tabelą odnośników (najczęściej implementowaną przez kompilator).

Jednak jeśli martwisz się, które z tych działa szybciej, a jest to wąskie gardło w twoim programie, masz fenomenalnie dobrze zachowany projekt.

4

Najlepszym sposobem, aby odpowiedzieć na tego typu pytania, jest porównanie z benchmarkiem.

Umieścić każdą z operacji w pętli, która wykonuje 10 000 razy, zarejestrować czas systemowy przed i po pętli, odjąć czas rozpoczęcia od czasu zakończenia i porównać wyniki każdej metody.