Все кто пишет на AutoIt`е жалуются на медленность кода. Ну я тоже не исключение=) Вот и решил провести маленькое исследование - какая из функций будет работать быстрее - так, которая вызывается из UDF, описанная в текущем файле или сразу код функции? До начала самого исследования думалось что по скорости они будут расположены так:
1. Сам код функции
2. Описанная в текущем файле
3. Вызываемая из UDF
Итак, для теста было создано два файла:
головной:
#include <TEST.au3>
;Немного подождём - что бы скрипт нормально загрузился и размялся перед боем
$SUM = 0
For $J = 1 To 1000
$SUM += TEST()
Next
;Здесь - для конкретного кода, а не вызывания функции
$time3 = TimerInit()
$SUM = 0
For $J = 1 To 1000
$RET = 0
For $I = 1 To 100
$RET *= $I
Next
$SUM += $RET
Next
$time3 = TimerDiff($time3)
;Здесь будем замерять время для функции вызванной из UDF
$time1 = TimerInit()
$SUM = 0
For $J = 1 To 1000
$SUM += TEST()
Next
$time1 = TimerDiff($time1)
;А здесь - для описанной ниже
$time2 = TimerInit()
$SUM = 0
For $J = 1 To 1000
$SUM += TEST2()
Next
$time2 = TimerDiff($time2)
MsgBox(0,"Результаты", "Из UDF: " & $time1 & Chr(13) & "Внутри: " & $time2 & Chr(13) & "Код: " & $time3)
Func TEST2()
$RET = 0
For $I = 1 To 100
$RET *= $I
Next
Return
EndFunc
TEST.au3 :
$RET = 0
For $I = 1 To 100
$RET *= $I
Next
Return
EndFunc
Итак, после 10 замеров получили вот такой результат:
1. Сам код функции, а не её вызов
2 и 3 Вызов из UDF и вызов их текущего файла
Причём, влияет порядок следования функций. Например если сначала замерять time1, а потом time2, то time1 будет больше. Если наоборот, т.е. сначала time2, потом time1, то time2 будет больше.
Итак, резюмирую:
- На скорость работы скрипта не влияет расположение функции - она может быть описана как в отдельном файле, так и в текущем.
- Отказ от функций и использование непосредственно кода этой функции даёт существенный прирост скорости.