Seite 1 von 1
WindowEvent() Vs WaitWindowEvent(0)
Verfasst: 24.02.2009 11:44
von Regenduft
Sevuz,
Ich habe ein Prog geschrieben, bei dem man über eine Config den Wert für das Timeout im WaitWindowEvent() festlegen kann, dabei ist mir folgendes aufgefallen:
WindowEvent() ist signifikant langsamer als
WaitWindowEvent(0)!
Was hat das zu bedeuten? Denkfehler meinerseits?
Folgenden Code habe ich (bei ausgeschaltetem Debugger) zum Testen verwendet:
Code: Alles auswählen
OpenWindow(0, 100, 100, 100, 100, "Test")
i = 0
start = ElapsedMilliseconds()
Repeat
If i >= 100000000
Break
EndIf
i + 1
Until WaitWindowEvent(0) = #PB_Event_CloseWindow ; <- ÄNDERN
;Until WindowEvent() = #PB_Event_CloseWindow
OpenConsole()
Print(Str(ElapsedMilliseconds()-start))
Input()
Re: WindowEvent() Vs WaitWindowEvent(0)
Verfasst: 24.02.2009 11:58
von ts-soft
Regenduft hat geschrieben:WindowEvent() ist signifikant langsamer als WaitWindowEvent(0)!
maximale Abweichung 1 ms

Verfasst: 24.02.2009 13:03
von Christian+
Seltsam bei mir gibt es ebenfalls Abweichungen zwischen WindowEvent() und WaitWindowEvent(0) habe aber keine Ahnung wieso.
Re: WindowEvent() Vs WaitWindowEvent(0)
Verfasst: 24.02.2009 14:07
von Josef Sniatecki
ts-soft hat geschrieben:Regenduft hat geschrieben:WindowEvent() ist signifikant langsamer als WaitWindowEvent(0)!
maximale Abweichung 1 ms

Sehr signifikant!
Ich denke mal, dass "WaitWindowEvent" deswegen langsamer ist, weil es
1. den Timeout als Parameter übergeben muss und 2. in WaitWindowEvent
ein Befehl drinn steckt, der zum Timeout dient (denke ich mal). Auch wenn
da jetzt Null als Timeout angegeben wird, müssen halt einige Opcodes mehr
durchgelaufen werden.
EDIT: Oh, habe gerade bemerkt, dass WindowEvent langsamer ist
Dann kann ja meine Aussage erst garnicht stimmen

Verfasst: 24.02.2009 14:09
von Kaeru Gaman
bei mir bekomme ich 3.5 sec für WaitWindowEvent(0) und 4.0 sec für WindowEvent(),
für die hundert millionen iterationen im Beispiel.
das macht dann eine halbe Nanosekunde Unterschied pro Aufruf,
für zwei Befehle, die zumindest so unterschiedlich sind,
dass der eine mit und der andere ohne Argument aufgefufen wird,
die sich also zwangsweise in ihrem Algorithmus
und damit in der benötigten Anzahl Taktzyklen Unterscheiden.
also, Fazit der Beobachtung:
Es gibt einen winzigen Unterschied dort, wo ein winziger Unterschied sein muss.
aha...
Verfasst: 24.02.2009 14:36
von ts-soft
Code: Alles auswählen
OpenConsole()
OpenWindow(0, 100, 100, 100, 100, "Test")
For j = 1 To 3
i = 0
start = ElapsedMilliseconds()
Repeat
If i >= 100000000
Break
EndIf
i + 1
Until WindowEvent() = #PB_Event_CloseWindow
PrintN(Str(ElapsedMilliseconds()-start) + " WindowEvent()")
i = 0
start = ElapsedMilliseconds()
Repeat
If i >= 100000000
Break
EndIf
i + 1
Until WaitWindowEvent(0) = #PB_Event_CloseWindow
PrintN(Str(ElapsedMilliseconds()-start) + " WaitWindowEvent()")
Next
Input()
3063 WindowEvent()
3531 WaitWindowEvent()
2906 WindowEvent()
2782 WaitWindowEvent()
2890 WindowEvent()
2750 WaitWindowEvent()
Der Unterschied hat also nicht viel mit der Funktion zu tun!
// edit
Hab den Testcode mal verbessert, zur Verdeutlichung der unsinnigen Ergebnisse
Verfasst: 24.02.2009 14:40
von cxAlex
2000 WindowEvent()
1828 WaitWindowEvent()
Umgekehrt:
1813 WaitWindowEvent()
2000 WindowEvent()
Bei mir ist WaitWindowEvent() immer schneller...
Verfasst: 24.02.2009 17:24
von Andesdaf
bei mir auch.
Verfasst: 24.02.2009 17:39
von Kaeru Gaman
ich hab ts' demo mal mehrfach durchlaufen lassen, ich bekomme immer so ergebnisse wie in meinem eigenen test.
aber es gibt auch noch so faktoren wie speicher-alignment von befehlen, besonders bei schleifensprüngen...
man müßte wohl noch wesentlich unterschiedlichere Testszenarien entwickeln,
bevor man seinen Messwerten das prädikat "aussagekräftig" verleihen kann...
Regenduft hat geschrieben:WindowEvent() ist signifikant langsamer als WaitWindowEvent(0)!
Was hat das zu bedeuten? Denkfehler meinerseits?
ob man bei einer solchen Konstruktion eine Abweichung von 12-14% "signifikant" nennen möchte, darüber könnte man am Stammtisch der Fakultät streiten....
Kaeru Gaman hat geschrieben:also, Fazit der Beobachtung:
Es gibt einen winzigen Unterschied dort, wo ein winziger Unterschied sein muss.
aha...
Verfasst: 25.02.2009 07:39
von Regenduft
Uff! So viele Antworten!
Ich hatte mit einem kurzen [selbstironie]"Du Riesenrind! Hirneinschalten, dann schreiben! Das liegt an...!"[/selbstironie] oder sowas in der Art gerechnet, aber nicht mit sowas!
*hüst* Ich hätte auch mal nen Systemneustart probieren sollen... jetzt ist es nichtmehr so
signifikant.
Was ich aber immernoch nicht begreife: Ich hätte erwartet das
WindowEvent() schneller ist, weil eben (wie andere schon erwähnt haben) kein Parameter übergeben wird. Aber wie ichs dreh und wende: WaitWindowEvent(0) ist schneller.
[fremdwortmodus]
Nach dem erbrachten empirischen Beweis muss ich anmerken: Diese exorbitante Divergenz dieser im Nießbrauch nahezu analogen Funktionen frappieren mich, auch wenn in diesem Auditorium Trivialität und Redundanz propagiert werden. Vielleicht ein Resultat meiner Schlaftrunkenheit.
[/fremdwortmodus]
Ich geh dann mal hundertmal "Ich darf keine Worte verwenden die gebildeter klingen als ich bin." schreiben.
PS: Nein... bin kein Student und war auch keiner...