hiermit möchte ich einen Thread eröffnen, in dem es darum geht,
verschiedene Programmiertechniken gegenüberzustellen und sie in Bezug
auf deren Geschwindigkeit zu untersuchen. Ich fange mal mit einem
einfachen Beispiel an:
Es kommt nicht gerade selten vor, dass ein Programmierer testen muss,
ob ein String einen Inhalt hat oder leer ist. Normalerweise geschieht dies
mit einem Vergleich auf einen Leerstring:
Code: Alles auswählen
; Variante 1
If MeinString$ = ""
ist er ebenfalls leer:
Code: Alles auswählen
; Variante 2
If Len(MeinString$) = 0
Variante 2 die eindeutig schnellere ist, denn VB generiert in Variante 1
zunächst einen Leerstring, um ihn dann mit MeinString$ zu vergleichen.
Diese zeitaufwendige Stringgenerierung fällt in Variante 2 weg.
Doch wie sieht's in PB aus. Welche Variante ist hier zu bevorzugen?
Um das Ergebnis vorwegzunehmen: Variante 1 ist in diesem Vergleich der
klare Geschwindigkeitssieger. Und: je länger der zu testende String ist,
desto deutlicher wird der Zeitunterschied.
Code: Alles auswählen
; Speedtest 1
; Prüfung, ob String leer ist
NewList ST_Check_1.l()
NewList ST_Check_2.l()
sDummy$ = Space(255)
For Schleife = 0 To 20
; ##################################
; Prüfung mittels Len(MeinString) = 0
; ##################################
Z1 = ElapsedMilliseconds()
For Counter = 0 To 1000000
If Len(sDummy$)=0 : EndIf
Next Counter
Z2 = ElapsedMilliseconds()
AddElement(ST_Check_1()) : ST_Check_1()=Z2-Z1
; ##################################
; Prüfung mittels MeinString = ""
; ##################################
Z1 = ElapsedMilliseconds()
For Counter = 0 To 1000000
If sDummy$="" : EndIf
Next Counter
Z2 = ElapsedMilliseconds()
AddElement(ST_Check_2()) : ST_Check_2()=Z2-Z1
Next
; ##################################
; Prüfung abgeschlossen
; hier kommt die Ausgabe:
; ##################################
sMessage$ = ""
For Schleife = 0 To 20
SelectElement(ST_Check_1(), Schleife)
SelectElement(ST_Check_2(), Schleife)
sMessage$ + Str(ST_Check_1()) + " / " + Str(ST_Check_2()) + #CRLF$
Next
MessageRequester("", sMessage$)