Что нового

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

Ganz

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

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

Norm

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

joiner

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

Webarion

Осваивающий
Сообщения
143
Репутация
24
Попробуйте выявить тенденции времени выполнения равнозначных алгоритмов, с помощью инструмента 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

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

Вложения

  • TestTime.zip
    6.7 КБ · Просмотры: 17
Последнее редактирование:
  • Like
Реакции: Ganz
Верх