- Offizieller Beitrag
Hey,
Ich wollte hier mal ein kleines Tutorial schreiben, wie man sein Script, wenn es wirklich um jede nanosekunde geht, optimieren kann. Ich würde mir wünschen, das ihr auch was dazu Beiträgt, egal in welchem Bereiech (Sei es nun einfache Funktionen, GDI, GUI, Operatoren, Arrays, ...) - immer alles her damit.
Unten findet ihr ein Script mit dem ihr es testen könnt und eure Ergebnisse teilen könnt:
Ich mache mal den Anfang:
PC Info
Zitat>Result with AutoIt 3.3.12.0 x86.
>CPU: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz X64
>RAM: 4.97/7.94 GB
>OS: WIN_81 (9600) X64
If/Switch/Select/Ternär
Bei den If/Switch/Select gibt es kaum ein unterschied mittlerweile wobei es bei If abhängig davon ist, ob die expression wahr oder falsch ist, bei Switcht uns Select allerdings nicht. Witzig, weil es früher andersrum war, da hat If Switch um längen geschlagen mittlerweile ist dem nicht mehr so.
Die neuen Ternären Operatoren in der Aktuellen AutoIt Version sind allerdings die schnellsten ($vParam = True ? True : False)
Zitat>Parameter: True
!Func If x = True Then (1) needs for 1048575 runs 3866.03 ms (Average: 0.0037 ms) --> 1.1x
-Func If x <> True Then (2) needs for 1048575 runs 3725.93 ms (Average: 0.0036 ms) --> 1.0x
-Func Switch (3) needs for 1048575 runs 3702.88 ms (Average: 0.0035 ms) --> 1.0x
-Func Select (4) needs for 1048575 runs 3737.54 ms (Average: 0.0036 ms) --> 1.0x
+Func Ternär (5) needs for 1048575 runs 3625.00 ms (Average: 0.0035 ms) --> 1.0x
Zitat>Parameter: False
!Func If x = True Then (1) needs for 1048575 runs 3710.02 ms (Average: 0.0035 ms) --> 1.0x
-Func If x <> True Then (2) needs for 1048575 runs 3691.45 ms (Average: 0.0035 ms) --> 1.0x
-Func Switch (3) needs for 1048575 runs 3667.33 ms (Average: 0.0035 ms) --> 1.0x
-Func Select (4) needs for 1048575 runs 3698.65 ms (Average: 0.0035 ms) --> 1.0x
+Func Ternär (5) needs for 1048575 runs 3578.56 ms (Average: 0.0034 ms) --> 1.0x
For/While/Do
For ist am schnellsten, While/Do geben sich nicht viel
Zitat>Parameter: 100
+Func For (1) needs for 4095 runs 842.98 ms (Average: 0.2059 ms) --> 1.0x
-Func While (2) needs for 4095 runs 1049.78 ms (Average: 0.2564 ms) --> 1.2x
!Func Do (3) needs for 4095 runs 1064.12 ms (Average: 0.2599 ms) --> 1.3x
ListView
Sollte selbsterklärend und auch nicht überraschend sein, Begin/EndUpdate schlägt hier alles obwohl die Nativen Funktionen nur kurz dahinter sind
Zitat-Func GUICtrlCreateListViewItem (1) needs for 255 runs 3129.61 ms (Average: 12.2730 ms) --> 1.1x
!Func _GUICtrlListView_AddItem (2) needs for 255 runs 6763.17 ms (Average: 26.5222 ms) --> 2.3x
+Func _GUICtrlListView_AddItem BeginUpdate (3) needs for 255 runs 2901.29 ms (Average: 11.3776 ms) --> 1.0x
Strukturen
DllSructSetData mit Index ist am schnellsten, danach DllstructSetData mit Namen (Bezeichnung). Die in der euen AutoIt Version eingeführte Möglichkeit Strukturen direkt aufzurufen sieht zwar schick aus im Code ist aber am langsamsten ($tStruct.Name = 123)
ZitatAlles anzeigen>Result with AutoIt 3.3.12.0 x86.
>CPU: Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz X64
>RAM: 5.43/7.97 GB
>OS: WIN_81 (9600) X64
>Parameter: DllStructCreate("byte abyte;char test[255];double adouble")
-Func For (1) needs for 4095 runs 2120.33 ms (Average: 0.5178 ms) --> 1.1x
+Func While (2) needs for 4095 runs 1960.73 ms (Average: 0.4788 ms) --> 1.0x
!Func Do (3) needs for 4095 runs 2243.12 ms (Average: 0.5478 ms) --> 1.1x
Fortsetzung folgt (hoffentlich auch durch euch )
Gruß,
Spider