Avatar billede timi Nybegynder
11. november 2005 - 20:20 Der er 8 kommentarer og
1 løsning

Hvad bliver afviklet hurtigst if then eller select case

Hvad bliver afviklet hurtigst, if then eller select case, altså den hurtigste kode.
Avatar billede sjh Nybegynder
11. november 2005 - 20:22 #1
select case
Avatar billede timi Nybegynder
11. november 2005 - 21:16 #2
sjh: har du dokumentation? eller er det bare et gæt?
Avatar billede sjh Nybegynder
11. november 2005 - 21:21 #3
ja nu kommer det jo også lige and på hvad du skal bruge det til.. men hvis du skal tjekke mange ting er select case hurtigst.. har selv tested det..
Avatar billede sjh Nybegynder
11. november 2005 - 22:17 #4
efter at ha testet det må jeg nok sige at det er døt løb.. men mener bare at ha læst det i bogen "start på visual basic 5" at select case var hurtiger end if then

men det var jo også i vb5 ;)

prøv selv:

Private Sub Command1_Click()
Dim num_trials As Long
Dim i As Long
Dim start_time As Single
Dim stop_time As Single
Dim x As Integer

Dim strTime1 As String
Dim strTime2 As String

    num_trials = CLng(10000000)
    start_time = Timer
    For i = 1 To num_trials
        If i = 0 Then
            x = 1
        ElseIf i = 1 Then
            x = 2
        ElseIf i = 2 Then
            x = 3
        ElseIf i = 3 Then
            x = 4
        ElseIf i = 4 Then
            x = 5
        ElseIf i = 5 Then
            x = 6
        ElseIf i = 6 Then
            x = 7
        ElseIf i = 7 Then
            x = 8
        ElseIf i = 8 Then
            x = 9
        ElseIf i = 9 Then
            x = 10
        End If
    Next i
    stop_time = Timer
    strTime1 = Format$(stop_time - start_time, "0.0000") & " seconds"
    DoEvents

    start_time = Timer
    For i = 1 To num_trials
        Select Case i
              Case 0: x = 1
              Case 1: x = 2
              Case 2: x = 3
              Case 3: x = 4
              Case 4: x = 5
              Case 5: x = 6
              Case 6: x = 7
              Case 7: x = 8
              Case 8: x = 9
              Case 9: x = 10
        End Select
    Next i
    stop_time = Timer
    strTime2 = Format$(stop_time - start_time, "0.0000") & " seconds"
    MsgBox "If Then: " & strTime1 & vbCrLf & "Select Case: " & strTime2
End Sub
Avatar billede timi Nybegynder
11. november 2005 - 22:59 #5
jeg skal teste på alle controlkarakterer i ascii tabellen d.v.s ca. 32 stykker, hvis jeg husker rigtigt.
Avatar billede timi Nybegynder
11. november 2005 - 23:03 #6
Prøver det.
Avatar billede Slettet bruger
12. november 2005 - 07:44 #7
Har en gang kørt noget benchmark med Compuware devPartner (http://www.compuware.com/products/devpartner/default.htm) og hvis du laver noget som er meget performance kritisk altså på niveau hvor det virkeligt betyder noget om If er hurtigere end Select så køb det produkt.

Men resultatet var at de er stort set lige hurtige og det der virkeligt betyder noget er hvis du er istand til at kende sammensætningen af de data du har. Altså der hvor du kan hente noget er ved at ordne teste således at de mest sandsynlige test ligger som de første. Lad og prøve et lille eksempel:

selet case number
case 0: do_stuff
case 1: do_stuff
case 2: do_stuff
end select

hvis nu 90 procent af dine værdier i number er 2 så kunne det betale sig at have

selet case number
case 2: do_stuff
case 0: do_stuff
case 1: do_stuff
end select

De er den måde du kan tune if og select, selve deres realisering under kompilering  er meget ens og har ubetydende forskelle.
Avatar billede timi Nybegynder
12. november 2005 - 12:36 #8
kryptos: smid et svar, havde ikke tænkt på at lægge de mest brugte data først
Avatar billede Slettet bruger
12. november 2005 - 12:53 #9
svar ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester