Hi,
dieses Phänomen kennt jeder, der einmal größere Scripte mit AutoIt "getimed" hat. Manchmal läuft das Script mit gleichbleibend konstanter Geschwindigkeit, manchmal wird es schneller und manchmal langsamer....
Imho hat das aber weniger mit AutoIt zu tun, als mit dem System Windows und dessen Multitasking/Multithreading. AutoIt ist nur "empfänglicher" infolge seiner Struktur (Interpretersprache)
Niemand ist heutzutage in der Lage, Systemevents vorherzusagen. Dort schaufelt Windows im Speicher herum, da werden irgendwelche Daten über den Bus geschoben, woanders laufen 326 Threads im Programmkontext des Users, die auch alle Zeit vom System beanspruchen. Und alle paar Millisekunden feuern noch irgendwelche Hardwareinterrupts dazwischen.....mal abgesehen vom hoch- und runtertakten jedes einzelnen Cores des Prozessors und den 8 Schlafmodi...
Soviel zum System an sich, daran kann man nichts ändern!
Aber wenn ich folgende Sätze lese, dann fange ich an zu zweifeln
:
ZitatJedenfalls läuft mein Script nur mit 60 oder mehr FPS flüssig. Selbst 50 ruckelt noch etwas.
Wundert mich schon, da ein "normales" LCD mit 50-60Hz angesteuert wird, alles an "mehr" FPS steht als Zahl auf dem Display, definitiv ankommen am Auge tun aber nur 60 FPS.....wer da einen Unterschied "sehen" kann, der verfügt über übernatürliche Kräfte^^
ZitatVielleicht klappt das ja bei manchen Personen, auf meinem Computer aber definitiv nicht.).
DAS liegt dann wohl definitiv am Computer, oder etwa nicht? Imho "klappen" AutoItscripte auf den ältesten Gurkenkisten genauso wie auf den neuesten Rechnern.
ZitatMeine While-Schleife hat ein Sleep(), und zwar While Sleep(10) <hier der Inhalt> WEnd
Aber das würde trotzdem einen ANSTIEG von konstanten 50 auf konstante 64 FPS nicht eklären
Bei 50 FPS dauert ein Frame 20ms, abzüglich deines Sleep(10) bleiben für dein Script 10ms pro loop. Bei 64 FPS dauert der loop nur noch 5ms, wird also DOPPELT SO SCHNELL abgearbeitet!
Daten per prefetching in den Cache zu laden kann Programme extrem beschleunigen. Per Assembler- oder C-Programm kann man bei speicherintensiven Reads/Writes schon mal den Faktor 1,5 an Speed rausholen mit EINEM Befehl! In native AutoIt funktioniert kein Cache-Management, da funkt zu viel dazwischen...allerdings kann es schon mal sein, dass die gerade benötigten Daten im Cache liegen, dann schlägt der Geschwindigkeitsboost auch bei einem AutoItprogramm zu. Im nächsten Programmdurchlauf hatte Windows die Daten im Speicher vielleicht vorher sogar auf die Platte ausgelagert...100 mal langsamer erfolgt der nächste Zugriff, noch Fragen?
Generell MUSS man ein Script sehen, um zu beurteilen, was warum wie oder auch nicht funktioniert! Also lass sehen ![]()