Заметил, что AutoIt очень медленно читает и записывает файлы построчно. См. код:
На моем Pentium E5300 время исполнения около 9 секунд.
Тот же самый код на Perl:
Время исполнения 0,3 секунды! Т.е. в 30 раз быстрее!
При чтении файла разрыв примерно в 10 раз.
Я пришел к выводу, что в AutoIt плохо реализована буферизация STDIN/STDOUT. При каждом вызове функции FileWriteLine() или FileReadLine() AutoIt делает запись на диск. В то время как Perl читает и пишет "порциями".
Таким образом, чтобы повысить скорость чтения(для записи не работает) с диска с помощью AutoIt, нужно не использовать эту функцию в цикле, а по возможности считывать весь файл в одну переменную. В таком случае скорость будет выше.
Добавлено:
*Можно, конечно, сказать, что модуль Timers замедляет работу, но в Perl также используется модуль bechmark, так что разница нивелируется.*
Добавлено:
Кто придумает, как записать в файл 1 миллион раз строку
Some text 1234567890
менее чем за три секунды, то поделитесь рецептом! У меня не получается.
Код:
#include <Timers.au3>
Global $starttime = _Timer_Init()
Global $OUT = FileOpen("test.txt", 2)
For $x = 1 to 1000000 Step 1
FileWriteLine($OUT, "Some text 1234567890")
Next
MsgBox(0, "", _Timer_Diff($starttime))
На моем Pentium E5300 время исполнения около 9 секунд.
Тот же самый код на Perl:
Код:
use Benchmark;
open (OU, ">test.txt");
$t0 = new Benchmark;
for (1 .. 1000000){
print OU "Some text 1234567890\n"
}
$t1 = new Benchmark;
$td = timediff($t1, $t0);
print "the code took:",timestr($td),"\n";
<>
Время исполнения 0,3 секунды! Т.е. в 30 раз быстрее!
При чтении файла разрыв примерно в 10 раз.
Я пришел к выводу, что в AutoIt плохо реализована буферизация STDIN/STDOUT. При каждом вызове функции FileWriteLine() или FileReadLine() AutoIt делает запись на диск. В то время как Perl читает и пишет "порциями".
Таким образом, чтобы повысить скорость чтения(для записи не работает) с диска с помощью AutoIt, нужно не использовать эту функцию в цикле, а по возможности считывать весь файл в одну переменную. В таком случае скорость будет выше.
Добавлено:
Сообщение автоматически объединено:
*Можно, конечно, сказать, что модуль Timers замедляет работу, но в Perl также используется модуль bechmark, так что разница нивелируется.*
Добавлено:
Сообщение автоматически объединено:
Кто придумает, как записать в файл 1 миллион раз строку
Some text 1234567890
менее чем за три секунды, то поделитесь рецептом! У меня не получается.