Sprung Befehl???

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Hellfront

Betreff: goto schnell

BeitragMo, Okt 24, 2005 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Jan_ hat Folgendes geschrieben:
goto ist tierrichst schnell.

Tja nur würd ich sagen dass Schleifen schneller sind. Probierts ruhig aus:
BlitzBasic: [AUSKLAPPEN]

i=1
ZaA = MilliSecs()
For i = 1 To 10

Print \"Hallo\"
Next
Print MilliSecs() - ZaA
WaitKey
End

BlitzBasic: [AUSKLAPPEN]

i=1
ZaA = MilliSecs()
.Anfang
i = i+1
Print \"Hallo\"
If i < 10 Then Goto Anfang
Print MilliSecs() - ZaA
WaitKey
End


Edit: habs nochmal probiert jetzt kamen gleiche werte raus merkwürdig jedenfalls ist der unterschied warscheinlich nicht groß. Probierts doch ma mit nem langsamen verfahren (hab selba jetzt keine Zeit) z. B. getcolor und achtet natürlich darauf dass die bedingungen möglichst gleich sind.

Hip Teen

BeitragMo, Okt 24, 2005 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Const durchlaeufe = 1000000

i=1
For_anfang = MilliSecs()

For i = 1 To durchlaeufe
Next

For_zeit = MilliSecs() - For_anfang

i = 0

While_anfang = MilliSecs()

While i <> durchlaeufe
i = i+1
Wend

While_zeit = MilliSecs() - While_anfang

i=0

Repeat_anfang = MilliSecs()

Repeat
i=i+1
Until I = durchlaeufe

Repeat_zeit = MilliSecs() - Repeat_anfang



I = 0

Forever_anfang = MilliSecs()

Repeat
i=i+1
If I = durchlaeufe Then Exit
Forever

Forever_zeit = MilliSecs() - Forever_anfang
i=0

Goto_anfang = MilliSecs()

.wiederholung
i=I+1
If I <> durchlaeufe Then Goto wiederholung

Goto_zeit = MilliSecs() - Goto_anfang


Graphics 800,600,0,2

Text 0,0, \"For: \" + For_zeit
Text 0,20, \"While: \" + While_zeit
Text 0,40, \"Repeat: \" + Repeat_zeit
Text 0, 60, \"Goto: \" + Goto_zeit
Text 0,80, \"Forever: \" + Forever_zeit
Flip
Stop

End


Hier schön zum testen der Schleifen. Was sieht man hier? Genau, Goto ist am langsamsten wegen der If Abfrage. Wenn man die Abbruchbedingung in einer Schleife durch eine If Abfrage löst, ist diese sogar noch langsamer als Goto. Was sagt das uns? Genau, Abbruchbedingung immer an die richtige Stelle setzen Wink


Edit: Ach ja Hacker, bei dir hat die Goto Variante einen durchlauf weniger als die For Variante, deswegen gibts keinen Unterschied Wink
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

Florian

BeitragMo, Okt 24, 2005 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:


goto ist tierrichst schnell.



Goto ist nicht so schnell.

Test 1 ( 2767 )
BlitzBasic: [AUSKLAPPEN]


i=1
ZaA = MilliSecs()
For i = 1 To 1000000000
Next
Print MilliSecs() - ZaA
WaitKey
End


Test 2 ( 2971 )
BlitzBasic: [AUSKLAPPEN]

i=1
ZaA = MilliSecs()
.Anfang
i = i+1
If i < 1000000000 Then Goto Anfang
Print MilliSecs() - ZaA
WaitKey
End

PSY

BeitragDi, Okt 25, 2005 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Ich versuche eigentlich generell ohne GOTO auszukommen. Zum Testen bau ich's schonmal ein, ersetze es aber später in der Final durch anderen Code.
Es gibt aber definitiv Situationen (wie xpression schon sagt), wo GOTO durchaus Sinn machen würde.

Zur Geschwindigkeit von gosub und function...die AUFRUFE an SICH sind ca. gleich schnell, wobei gosub minimal schneller ist. Alles schön und gut, aber man sollte bedenken, dass in functions globale Variablen benutzt werden, was die Geschwindigkeit mitunter -relativ gesehen- STARK beeinflussen kann.

Als Beweis folgender Code.
Lasst ihn mal durchlaufen, merkt euch die Ergebnisse und kommentiert dann mal global c aus ...

Code: [AUSKLAPPEN]

;Global c

;goto
timer1=millisecs()
For i= 1 To 10000000
  Goto blubb
  .anfang
Next
timer1=millisecs()-timer1

;gosub
timer2=millisecs()
For i= 1 To 10000000
  Gosub blobb
Next
timer2=millisecs()-timer2

;function
timer3=millisecs()
For i= 1 To 10000000
  blibb()
Next
timer3=millisecs()-timer3

;ergebnis
Text 50,100,"goto:"+timer1
Text 150,100,"gosub:"+timer2
Text 250,100,"function:"+timer3
WaitKey

.blobb
a=a+1
Return

.blubb
b=b+1
Goto anfang

Function blibb()
c=c+1
End function



Grüsse,
PSY

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group