пятница, 30 апреля 2010 г.

Оптимизация кода AutoIt

Все кто пишет на 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 :

Func TEST()
$RET = 0
For $I = 1 To 100
$RET *= $I
Next
Return
EndFunc


Итак, после 10 замеров получили вот такой результат:

1. Сам код функции, а не её вызов

2 и 3 Вызов из UDF и вызов их текущего файла

Причём, влияет порядок следования функций. Например если сначала замерять time1, а потом time2, то time1 будет больше. Если наоборот, т.е. сначала time2, потом time1, то time2 будет больше. 

Итак, резюмирую:

  • На скорость работы скрипта не влияет расположение функции - она может быть описана как в отдельном файле, так и в текущем.
  • Отказ от функций и использование непосредственно кода этой функции даёт существенный прирост скорости.




среда, 28 апреля 2010 г.

Простой навигатор для консоли

Итак, менюшка уже описана, а вот и её применение. Простенький навигатор по диску с помощью меню. Может перемещаться по папкам, запускать любые файлы. Пока всё - это все лишь пример применения меню=)  Но мне вещь показалась полезной при работе в консоле=)

Скачать


суббота, 24 апреля 2010 г.

Меню в BAT

Те кто хоть раз писал на BAT со мной согласятся - всегда чего-нибудь не хватает. Вот мне, например там не хватает менюшки - для более наглядного общения с пользователем. Ведь рядовому пользователю вряд ли понравится читать хелп и смотреть параметры - ему гораздо привычнее нажать пару кнопок и получить результат - например, выбрать нужный пункт меню. Ну и вот, собственно для этого и была написана менюшка на BAT. Итак, как пользоваться:

  call menu.bat "1 string" "2 string" "3 string" "4 string" "5 string" "6 string" "7 string" etc.

После того как пользователь выбрал пункт меню - пакетный файл вернет результат. Обратится к нему можно через переменную errorlevel.

ПРИМЕР

Создадим BAT файл следующего содержания:

  @echo off

  call menu.bat "ADD" "DEL" "EDIT" "HELP" "EXIT"

  echo You Select: %errorlevel%

Результат его работы (копировано с консоли):


1: ADD
2: DEL
3: EDIT
4: HELP
5: EXIT

Select: 6
Error! Retry input
Select: df
Error! Retry input
Select: 4
You Select: 4

Вообщем вот так =) Сделать более красивую менюшку с управлением клавишами стрелок встроенными средствами BAT -  нельзя, т.к.  нельзя считать нажатие клавиши. 

Скачать

воскресенье, 18 апреля 2010 г.

Вводное

Ну что же, попробуем обосноваться здесь. Вот это мы уберём, облако тегов надо будет добавить, здесь почистим.. Если кратко - идёт процесс обживания блога =)

Давно надоевший вопрос - для чего создан блог? Ну надо же куда-то выкладывать все мысли, идеи о тех проектах, которыми я занимаюсь. Ага, а вот и следующий вопрос - а чем же я занимаюсь? Ну первым делом я пытаюсь программировать (ну если не лень как всегда). В основном на C# и AutoIT. Но не брезгую и другими языками. Надеюсь, что в скорое время выложу, точнее напишу статейку про BAT.  Ну и так как основной уклон сейчас у меня на написание второй версии бота для одной MMORPG (только тсссс.... =) ) то и про это что-нибудь тоже попробую написать.