Ich bin der Meinung gelesen zu haben (uh cooler konjunktiver Satz), das die gesamten IsObject Funktionen
genauso durchgearbeitet werden wie im SDK mit den PB_EnumerateObject.... also von Anfang bis Treffer oder nix.
Da war auch irgendwo ein Posting von Fred oder freak wo abgeraten wurde Is... zu benutzen, da diese viel Zeit kosten können....
Frage zu den Image ID's
Re: Frage zu den Image ID's
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
Re: Frage zu den Image ID's
Aber das würde ja bedeuten, dass PB doch intern ein riesen-Dim-Array anlegt, wo dann alle Elemente durchlaufen werden müssten. for i = 0 to 9999999 dauert natürlich seine Zeit...
Ist das Array nicht eher assoziativ angelegt
0 -> objekt1
1 -> objekt2
9999999 -> objekt_pb_any
und bei jedem OpenXYZ kommt einfach ein Element hinten dran?
Das würde jetzt nicht sooo viel Performance kosten. Wenn man die jetzt in einem eigenen Array vorhält, dann geht das doch auch nicht viel schneller, es zu durchlaufen, um ein bestimmtes herauszupicken?
Edit: vergesst, was ich gerade geschrieben habe, da man ja bei nem Dim-Array direkt auf die Elemente zugreifen kann und keine Such-Schleife braucht.....
Ist das Array nicht eher assoziativ angelegt
0 -> objekt1
1 -> objekt2
9999999 -> objekt_pb_any
und bei jedem OpenXYZ kommt einfach ein Element hinten dran?
Das würde jetzt nicht sooo viel Performance kosten. Wenn man die jetzt in einem eigenen Array vorhält, dann geht das doch auch nicht viel schneller, es zu durchlaufen, um ein bestimmtes herauszupicken?
Edit: vergesst, was ich gerade geschrieben habe, da man ja bei nem Dim-Array direkt auf die Elemente zugreifen kann und keine Such-Schleife braucht.....
Re: Frage zu den Image ID's
Das sind bestimmt direkt Array Indices oder Map Keys.
Ansonsten einfach ausprobieren. Ich kann da keinen Geschwindigkeitsunterschied feststellen:
Ansonsten einfach ausprobieren. Ich kann da keinen Geschwindigkeitsunterschied feststellen:
Code: Alles auswählen
If #PB_Compiler_Debugger
MessageRequester("", "disable the debugger!")
;End
EndIf
OpenConsole()
t1 = 0
t2 = 0
alternatingCases = 1;00
maxPerCase = 500000000
win = OpenWindow(#PB_Any, 100, 100, 100, 100, "")
g1 = 0
g2 = 9999
For n=1 To alternatingCases
; ----------------------------------
ButtonGadget(g1, 100, 100, 100, 100, "")
While WindowEvent() : Wend
t = ElapsedMilliseconds()
For i=0 To maxPerCase
If IsGadget(g1)
dummy+1
EndIf
Next
t = ElapsedMilliseconds()-t
PrintN("case 1: " + t)
t1 + t
FreeGadget(g1)
; ----------------------------------
ButtonGadget(g2, 100, 100, 100, 100, "")
While WindowEvent() : Wend
t = ElapsedMilliseconds()
For i=0 To maxPerCase
If IsGadget(g2)
dummy+1
EndIf
Next
t = ElapsedMilliseconds()-t
PrintN("case 2: " + t)
t2 + t
FreeGadget(g2)
; ----------------------------------
Next
PrintN("")
PrintN("case 1 total: " + t1)
PrintN("case 2 total: " + t2)
Input()
Re: Frage zu den Image ID's
Hier sind es ca. 2ms Unterschied zwischen den beiden Durchläufen.
Wenn ich den zweiten ButtonGadget per #PB_Any erzeuge, dann sind es im zweiten Durchlauf schon 200ms mehr als vorher.
Und dann gibt es eine Kuriosität:
Wenn ich im unveränderten Code die Variable g2 auf 999999 hochsetze, dann habe ich im ersten Durchlauf sogar 300ms mehr als zuvor, obwohl g2 zu dem Zeitpunkt noch gar nicht verwendet wird. Wie kommt das?
Zum Glück benutze ich diese IsX eigentlich nie in irgendwelchen Schleifen, die möglichst performant sein müssen.
Wenn ich die erste Schleife auf das hier ändere, ist die übrigens auch 200ms langsamer, also denke ich, dass IsX doch recht peformant ist:
Wenn ich den zweiten ButtonGadget per #PB_Any erzeuge, dann sind es im zweiten Durchlauf schon 200ms mehr als vorher.
Und dann gibt es eine Kuriosität:
Wenn ich im unveränderten Code die Variable g2 auf 999999 hochsetze, dann habe ich im ersten Durchlauf sogar 300ms mehr als zuvor, obwohl g2 zu dem Zeitpunkt noch gar nicht verwendet wird. Wie kommt das?
Zum Glück benutze ich diese IsX eigentlich nie in irgendwelchen Schleifen, die möglichst performant sein müssen.
Wenn ich die erste Schleife auf das hier ändere, ist die übrigens auch 200ms langsamer, also denke ich, dass IsX doch recht peformant ist:
Code: Alles auswählen
For i=0 To maxPerCase
a+1
a+1
Next
Re: Frage zu den Image ID's
2ms unterschied ist erstens zuwenig um irgendwas zu bedeuten, und zweitens wertlos ohne die eigentichen Werte (1000ms zu 1002ms ?). alternatingCases sollte asserdem auf 1 bleiben, sonst wird der 1. testcase eventuell vom 2. testcase aus dem vorherigen Durchlauf beeinflusst.
Bei mir sind es auch ~10% Unterschied, aber mal ist ebene der eine Fall schneller und mal der andere.
Probier 999999 mal mit Debugger, der wird die sagen das er das nicht will und wahrscheinlich gar kein Gadget erstellen.
Zum Vergleich mit #PB_Any hab ich keine Ahnung.
Ist letztlich auch völlig schnuppe wie schnell IsGagdet() ist, erstrecht wenn man es garnicht verwendet.
Bei mir sind es auch ~10% Unterschied, aber mal ist ebene der eine Fall schneller und mal der andere.
Probier 999999 mal mit Debugger, der wird die sagen das er das nicht will und wahrscheinlich gar kein Gadget erstellen.
Zum Vergleich mit #PB_Any hab ich keine Ahnung.
Ist letztlich auch völlig schnuppe wie schnell IsGagdet() ist, erstrecht wenn man es garnicht verwendet.