Seite 1 von 4

OpenWindowedScreen() / OpenScreen() zu langsam

Verfasst: 20.06.2017 19:56
von Fluid Byte

Code: Alles auswählen

; Debugger ausschalten

InitSprite()

OpenWindow(0,0,0,1280,720,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ElapsedMilliseconds()
OpenWindowedScreen(WindowID(0),0,0,1280,720)
MessageRequester("Time passed",Str(ElapsedMilliseconds()) + " ms")
Ich kriege mit diesem winzigen Testcode fast 0.6 Sekunden Verzögerung. Zieht man meine starke Hardware in Betracht: i7@3.4GHz 8 Kerne, GTX 1070 8GB, 32GB RAM, ist dies doch sehr merkwürdig. Ich habe zwar sehr lange nicht mehr mit PB gearbeitet aber so langsam habe ich diesen Befehl nicht in Erinnerung.

Normaler Overhead oder muss ich mir Sorgen machen? Dies ist Teil eines größeren Programms und man spürt das Lag deutlich bei jedem Start.

Re: OpenWindowedScreen() / OpenWindowedScreen() zu langsam

Verfasst: 20.06.2017 20:16
von _JON_
Was soll den der Code für eine Zeit messen?
Also wenn Ich hier den ersten Aufruf von ElapsedMilliseconds() vom 2-ten abziehe sind es 26 ms
und das auf sehr betagter Hardware.

Re: OpenWindowedScreen() / OpenWindowedScreen() zu langsam

Verfasst: 20.06.2017 20:51
von Fluid Byte
_JON_ hat geschrieben:Was soll den der Code für eine Zeit messen?
Du kriegst 26 ms auf alter Hardware, ich fast 600ms auf einem aktuellen Top-Rig ...

Welche von den beiden Zeiten will ich wohl haben? Ich glaub fest daran dass du selbst drauf kommst ...
_JON_ hat geschrieben:Also wenn Ich hier den ersten Aufruf von ElapsedMilliseconds() vom 2-ten abziehe sind es
und das auf sehr betagter Hardware.
Wieso abziehen? Der erste Aufruf von ElapsedMilliseconds() ist 0, da brauchst du nichts abziehen.

Re: OpenWindowedScreen() / OpenWindowedScreen() zu langsam

Verfasst: 20.06.2017 20:59
von Kiffi
Fluid Byte hat geschrieben:Der erste Aufruf von ElapsedMilliseconds() ist 0, da brauchst du nichts abziehen.
nee, der ist bei mir schon knapp über 200

so passt's:

Code: Alles auswählen

InitSprite()
OpenWindow(0,0,0,1280,720,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
z1 = ElapsedMilliseconds()
OpenWindowedScreen(WindowID(0),0,0,1280,720)
z2 = ElapsedMilliseconds()
MessageRequester("Time passed", Str(z2 - z1) + " ms")

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Verfasst: 20.06.2017 21:20
von Fluid Byte
Der erste Aufruf von ElapsedMilliseconds() ist bei mir 0. Keine Veränderung, fast 600 ms Verzögerung. Das ist im Verhältnis zur Stärke von PB und meiner Hardware brutal viel.

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Verfasst: 20.06.2017 21:51
von _JON_
Fluid Byte hat geschrieben:Wieso abziehen? Der erste Aufruf von ElapsedMilliseconds() ist 0, da brauchst du nichts abziehen.
ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen.

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Verfasst: 20.06.2017 22:01
von ccode_new
_JON_ hat geschrieben:ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen.
Genau !!! :allright:

Man braucht immer 2 Aufrufe für eine Referenz.

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Verfasst: 20.06.2017 22:03
von Fluid Byte
_JON_ hat geschrieben:ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen.
Wo hast du denn das Märchen her? Soll ich jetzt zum dritten Mal sagen das ElapsedMilliseconds() 0 ist?
ccode_new hat geschrieben:Genau !!! :allright:
Ja genau, genau falsch.

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Verfasst: 20.06.2017 22:10
von ccode_new
Fluid Byte hat geschrieben:Wo hast du denn das Märchen her? Soll ich jetzt zum dritten Mal sagen das ElapsedMilliseconds() 0 ist?
Schau in die Hilfe !!!!

ElapsedMilliseconds() gibt dir beim ersten Aufruf irgend einen Scheiß wieder.
Das kann auch 0 sein und hat auch nichts mit der Startzeit deines Programms zu tun.

Du brauchst zum Messen immer min. 2 Aufrufe.

Ich denke: "ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen."

Stimmt schon, oder auch nicht???

Bin mir nicht ganz sicher.

Aber die Millisekunden werden bei einem Speicherüberlauf einfach wieder bei 0 anfangen.

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Verfasst: 20.06.2017 22:21
von _JON_
Fluid Byte hat geschrieben: Wo hast du denn das Märchen her? Soll ich jetzt zum dritten Mal sagen das ElapsedMilliseconds() 0 ist?
ElapsedMilliseconds() ist ein Wrapper für die GetTickCount_() API GetTickCount MSDN