Что нового

Оптимизация и повышение скорости работы скрипта

Ganz

Новичок
Сообщения
6
Репутация
0
Добрый день!

Я написал скрипт и успешно использую его для работы. Однако скорость его работы меня не устраивает. Я решил провести его оптимизацию.
Хотел спросить - Возможно ли получить сводку о работе скрипта - например скорость выполнения каждой отдельной строки кода - что бы понять на какой участок кода уходит больше всего времени.
 

Norm

Знающий
Сообщения
104
Репутация
12
Это, думаю, должно подойти
Код:
$hTimer = TimerInit() ; Запускает таймер и хранит дескриптор в переменной
Sleep(3000)
$iDiff = TimerDiff($hTimer) ; Возвращает разницу во времени, от предыдущего запуска TimerInit, дескриптор которого указан в переменной
MsgBox(0, "Разница во времени", $iDiff)
 

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
автор, без кода невозможно указать на слабые участки. приведи пример и укажи, что именно не устраивает. восприятие скорости весьма субъективно. если это поиск пикселей, то автоит не самый скоростной инструмент
 

Webarion

Знающий
Сообщения
89
Репутация
6
Попробуйте выявить тенденции времени выполнения равнозначных алгоритмов, с помощью инструмента TestTime.au3. Ссылка на архив ниже. Пример есть в архиве.

Пример:
Код:
#include 'TestTime.au3'

_Scan_TSTM()

#Region TestTime Func1
Local $a = 1, $b
$b = $a = 1 ? 1 : 2
#EndRegion

#Region TestTime Func2
Local $a = 1, $b
If $a = 1 Then
    $b = 1
Else
    $b = 2
EndIf
#EndRegion

#Region TestTime Func3
Local $a = 1, $b
If $a = 1 Then $b = 1
If $a <> 1 Then $b = 2
#EndRegion

#Region TestTime Func4
Local $a = 1, $b
Switch $a
    Case 1
        $b = 1
    Case Else
        $b = 2
EndSwitch
#EndRegion

#Region TestTime Func5
Local $a = 1, $b
Select
    Case $a = 1
        $b = 1
    Case $a <> 1
        $b = 2
EndSelect
#EndRegion

Сообщение автоматически объединено:

Если брать пример выше, то по моим наблюдениям таймингов, во множестве тестов, однострочные условия на первом месте $b = $a = 1 ? 1 : 2, на втором switch, потом select, далее if-else

Если вас интересуют скорости, то скрипт нужно оптимизировать. Придумать и протестировать на скорость несколько вариантов участков своего кода.
Например, поиск данных в большом архиве, с помощью перебора, дольше, чем если создать базу в строковой переменной, из которой можно тащить данные с помощью регулярок, это актуально для большой базы данных. Либо к примеру, если хранить карту ключей в первой ячейке массива, и по ключам тащить данные из остальных, то тут хороший вариант не заморачиваться с типами хранимых в базе переменных.И взаимодействие с такой базой будет быстрее. Соответственно, для этого, нужен свой сервис для работы с такой базой. Это дополнительное количество кода, но, в данном случае, увеличенный объём кода, оправдывается скоростью.
Точно также со всем остальным вашим кодом. Смотрите на циклы, вероятные точки замедления и пробуйте их оптимизировать другими способами.
 

Вложения

Последнее редактирование:
Верх