Здравствуйте, гость ( Вход | Регистрация )

5 страниц V < 1 2 3 4 > »   
Ответить в эту темуОткрыть новую тему
> Проверка скорости обработки, --данных--
cirus
сообщение 11.6.2020, 10:19
Сообщение #21


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
Чет нигде примеров нету

Какой пример нужен? Напишите на старом синтаксисе, перепишу на луа.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 10:32
Сообщение #22


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 11.6.2020, 14:19) *

Какой пример нужен? Напишите на старом синтаксисе, перепишу на луа.

Да я уже нашёл вроде

Почему-то хендл окна через
Код
--lua
local h = findwindow ("Блокнот")
if h then    -- если окно или несколько окон найдено
    for i = 1, #h do
        log (h[i][1])  -- показать в логе хендлы всех найденных окон
    end
end


отличается от хендла через InqSoft Window Scanner, причём там нет дочернего окна.
Как узнать какой из них реальный?

----UPD---
А я понял там хэндл в каком-то другом формате пишется, с тремя 000, какой из них вписывать?

Проще говоря мне нужно найти хэндл окна по названию, 1 раз вывести его в лог, а затем сделать рабочим, и далее использовать какую-то функцию или вставлять h в каждую переменную?
Код
local G = color (100, 100 h)

Или какой из этих способов привязки самый простой? чтобы один раз вписать в скрипт и забыть про привязку даже при изменении хэндла окна?
+ к этому включение/остановку скрипта(как я понял в этой https://forum.uokit.com/index.php?showtopic=70282 теме) можно использовать
set hotkeystart {Клавиша}
перед --lua чтобы можно было отключать его.
Не будет ли это тормозом при обработке Lua событий в теле скрипта после --Lua?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.6.2020, 10:52
Сообщение #23


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
причём там нет дочернего окна.

У блокнота есть, редактор это дочернее окно. Ctrl+A над заголовком это то что находит findwindow.
Цитата
Проще говоря мне нужно найти хэндл окна по названию, 1 раз вывести его в лог, а затем сделать рабочим

На вики findwindow, первый пример.
Цитата
Не будет ли это тормозом при обработке Lua событий в теле скрипта после --Lua?

Нет.
Цитата
local G = color (100, 100 h)

Все параметры пишутся через запятую.
Цитата
А я понял там хэндл в каком-то другом формате пишется, с тремя 000, какой из них вписывать?

Выбрать отображать десятичные хендлы.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 11:00
Сообщение #24


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 11.6.2020, 14:52) *

У блокнота есть, редактор это дочернее окно. Ctrl+A над заголовком это то что находит findwindow.


Да там не блокнот, но уже понятно что через пример нормально находит

Цитата(cirus @ 11.6.2020, 14:52) *

Выбрать отображать десятичные хендлы.

В этой версии нет десятиричных хэндлов, или я не там смотрю.
А всё, там ПКМ по самому числу вид меняет.

И еще если я напишу километровое название переменной его обработка отличиться от односимвольного?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.6.2020, 11:10
Сообщение #25


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
И еще если я напишу километровое название переменной его обработка отличиться от односимвольного

Что мешает проверить? Запустите цикл на миллиард итераций и сравните время выполнения.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 11:53
Сообщение #26


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 11.6.2020, 15:10) *

Что мешает проверить? Запустите цикл на миллиард итераций и сравните время выполнения.

Ладно, это сделаю, а вот еще как узнать какая именно часть скрипта наиболее затратна по времени? Т.е. обращение к ней и обработка занимает наибольшую долю?

Цитата(cirus @ 11.6.2020, 15:10) *

Что мешает проверить? Запустите цикл на миллиард итераций и сравните время выполнения.


ОХОХО....

Код
local t = os.clock()
local G = color (100, 100, h)
local R = color (200, 200, h)
for i = 1, 10000 do
  if G == 0 then
    a = 1
  else
    if R == 0 then
     a = 2
    else
    end
  end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')


t = os.clock()
for i = 1, 10000 do
  if color (100, 100, h) == 0 then
   b = 1
  else
    if color (200, 200, h) == 0 then
     b = 2
    else
    end
  end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')


Цитата
log
Затрачено времени: 0.000 секунд
Затрачено времени: 5.765 секунд


Вот это засада, а почему никто раньше не говорит что время исполнения в 5 раз выше при помещении переменных внутрь цикла?

Вот об этом я и говорю, что есть некоторая информация известная всем кто давно занимается заставляющая по 3 дня ломать рога в поисках проблемы оптимизации какой-нибудь переменной, написанной в неверном формате и приводящей к лагам, которая при озвучивании могла бы уберечь от ненужных действий.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.6.2020, 12:05
Сообщение #27


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Код ошибочный. В первом цикле цвет не проверяется, только значение переменной.
Цитата
а вот еще как узнать какая именно часть скрипта наиболее затратна по времени?

Все функции, которые работают с цветом, color, findcolor, findimage.
Ускорить скрипт можно если не использовать функции пилота.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 12:19
Сообщение #28


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 11.6.2020, 16:05) *

Код ошибочный. В первом цикле цвет не проверяется, только значение переменной.

Вот это я<вырезано анти-матом>)

Ну и ладно
Хоть за километровые значения переменных узнали что почти нет разницы
Код
local t = os.clock()
local Gcer5vew53b5vb4e456vb3525b3t634wbtweb53w45345bq35ertwbt = color (100, 100, h)
local Rrntyriybes54v2warvw6be6e5b64e64646eb5a45byrbybrybeybrsy = color (200, 200, h)
for i = 1, 10000000000 do
  if Gcer5vew53b5vb4e456vb3525b3t634wbtweb53w45345bq35ertwbt == 0 then
    a = 1
  else
    if Rrntyriybes54v2warvw6be6e5b64e64646eb5a45byrbybrybeybrsy == 0 then
     a = 2
    else
    end
  end
end

log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')


local t = os.clock()
local G = color (100, 100, h)
local R = color (200, 200, h)
for i = 1, 10000000000 do
  if G == 0 then
    a = 1
  else
    if R == 0 then
     a = 2
    else
    end
  end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')

Цитата

Затрачено времени: 11.844 секунд
Затрачено времени: 11.859 секунд

Даже с меньшими символами дольше. Может потому что приоритет вышенаписанному в обработке отдаётся?

Цитата(cirus @ 11.6.2020, 16:05) *

Код ошибочный. В первом цикле цвет не проверяется

Как будет выглядеть нормальный код?)

Цитата(cirus @ 11.6.2020, 16:05) *

если не использовать функции пилота.

А если через другой компилятор? Есть варианты?
c
В Autoit вроде видел похожие функции
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 12:53
Сообщение #29


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 11.6.2020, 16:05) *

Все функции, которые работают с цветом

А вот что меня интересует - время проверки определённого участка кода:
Код
local t = os.clock()
local G = color (100, 100, h)
local R = color (200, 200, h)
for i = 1, 1000 do
    Засечь начало здесь
  if G == (0) then
    a = 1
  else
    if R == (0) then
     a = 2
    else
    end
Засечь окончание здесь
  end
end
log (' Вывести в лог ' .. время промежутка .. '')
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 11.6.2020, 13:16
Сообщение #30


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2398
Пользователь №: 18.746



Цитата(Levo222 @ 11.6.2020, 12:19) *
Как будет выглядеть нормальный код?)

Код
--lua
log"clear"
t = os.clock()
h = findwindow("Блокнот")[1][1]
function G() return(color (156, 102, h)) end
function R() return(color (369, 260, h)) end
for i = 1, 1000 do
    if G() == 0 then
        a=1
    end
    if R() == 0 then
        a=2
    end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')
log(" ")
t = os.clock()
for i = 1, 1000 do
    if color (229, 233, h) == 0 then
        a=1
    end
    if color (767, 370, h) == 0 then
        a=2
    end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')

Цитата
Затрачено времени: 11.210 секунд

Затрачено времени: 13.795 секунд

Цитата(Levo222 @ 11.6.2020, 12:53) *
А вот что меня интересует - время проверки определённого участка кода:

Код
--lua
log "clear"
--code
t = os.clock()       -- Засечь начало здесь
--code
--code
--code
t1=(os.clock() - t)  -- Засечь окончание здесь
--code
log ('время промежутка: '..string.format("%.3f", t1)..' секунд')


Сообщение отредактировал Fors1k - 11.6.2020, 13:28


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.6.2020, 13:36
Сообщение #31


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Если уж речь идет о скорости, то не используйте глобальные переменные, доступ к локальным быстрее.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 11.6.2020, 14:14
Сообщение #32


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2398
Пользователь №: 18.746



Цитата(cirus @ 11.6.2020, 13:36) *

Если уж речь идет о скорости, то не используйте глобальные переменные, доступ к локальным быстрее.

Раз уж сегодня день замеров, то проверим кодом и этот тезис)
Мои ставки были, что результат будет ~одинаковым.
Помучаем отдельно глобальную и локальную переменную:
Код
--lua
log"clear"
a=4
tAverage1=0
for c=1, 3 do
t = os.clock()
for i=1, 1000000000 do
    a=a*2
    a=a/2
end
t1=(os.clock() - t)
tAverage1=tAverage1+t1
end
log ('Global Var: '..string.format("%.3f", tAverage1/3)..' секунд')
log" "
local b=4
tAverage2=0
for c=1, 3 do
t = os.clock()
for i=1, 1000000000 do
    b=b*2
    b=b/2
end
t2=(os.clock() - t)
tAverage2=tAverage2+t2
end
log ('Loacal Var: '..string.format("%.3f", tAverage2/3)..' секунд')

Цитата
Global Var: 2.377 секунд

Loacal Var: 2.607секунд

Работа с глобальными переменными оказалась быстрее на 10%.


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 11.6.2020, 14:56
Сообщение #33


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21046
Пользователь №: 16.156



Цитата(Fors1k @ 11.6.2020, 14:14) *

Работа с глобальными переменными оказалась быстрее на 10%.




На сколько понимаю - это частный случай. Чем больше глобальных переменных тем медленней работа. Я не эксперт луа, но как по мне, в тесте переменные в одной области лежат.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 11.6.2020, 15:41
Сообщение #34


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2398
Пользователь №: 18.746



Цитата(Cockney @ 11.6.2020, 14:56) *
На сколько понимаю - это частный случай.
Тоже так думаю, хотя специально сделал 3 замера каждому.
Цитата(Cockney @ 11.6.2020, 14:56) *
как по мне, в тесте переменные в одной области лежат.
Независимо от области видимости, локальные и глобальные переменные хранятся в разных местах памяти, хотя это неважно, так как в проверяемом тезисе сказано, что сам факт обращения к нелокальной переменной требует больше времени.
Цитата(Cockney @ 11.6.2020, 14:56) *
Я не эксперт луа

Я тоже, поэтому и предпочел все узнать на деле) Что ж, проведем эксперимент с новыми условиями.
Количество замеров увеличим с 3 до 300, испытуемые переменные будут находиться в разных областях видимости:
Код
--lua
log"clear"
tAverage1=0
for c=1, 300 do
    a=4
    t = os.clock()
    for i=1, 10000000 do
        a=a*2
        a=a/2
    end
    t1=(os.clock() - t)  
    tAverage1=tAverage1+t1
end
log ('Global Var: '..string.format("%.5f", tAverage1/300)..' секунд')
log" "
tAverage2=0
for c=1, 300 do
    local b=4
    t = os.clock()
    for i=1, 10000000 do
        b=b*2
        b=b/2
    end
    t2=(os.clock() - t)
    tAverage2=tAverage2+t2
end
log ('Loacal Var: '..string.format("%.5f", tAverage2/300)..' секунд')
-- Убедимся, что переменные были в разных областях видимости
log(a)
log(b)
Цитата
Global Var: 0.02448 секунд

Loacal Var: 0.02691 секунд
4
nil

Работа с глобальной переменной снова оказалась быстрее на 10%. Опять 10%, причем при 300х замерах. Такой результат уже можно считать стабильностью, хотя я все-таки ожидал увидеть (+/- )1-2%.

Сообщение отредактировал Fors1k - 11.6.2020, 15:45


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 11.6.2020, 16:10
Сообщение #35


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21046
Пользователь №: 16.156



Тест не совсем корректен. Под увеличением числа переменных я имел в виду:
Код

local a_1
local a_2
....
local a_n


и последующие обращение к ним.

Касательно областей памяти. Да, они лежат в разных областях памяти. Но именно в данном тесте это скорее всего не так. Что я имею в виду:

Код

--lua
a = 0
local b = 1


Где лежит b ? Почему в разных, если область памяти пока только одна - глобальная.

А теперь такой вариант

Код

--lua
//global mem
a = 0

function f()
   //local mem
   local b = 0
   return b
end

//global mem
local res = f()



Здесь, при вызове функции будет сформирована своя область памяти, изолированная от глобальное, и уже в ней будет лежать b.

Следовательно, локальная область памяти будет содержать только b, в то время как глобальная будет содержать a, res и еще кучу системных переменных которые задаются не явно. Что в итоге и скажется на производительности.

Собственно, кажется это и подтверждение моих соображений:

https://www.lua.org/pil/4.2.html

Код

--lua
local a = 0


Означает что переменная глобальна для всего скрипта, но из других скриптов она не видна.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 16:57
Сообщение #36


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(Fors1k @ 11.6.2020, 17:16) *

Код

set hotkeystart {End}
--lua
log 'clear' log 'mode compact'
local h = findwindow ("Блокнот")
if  h then
    workwindow (h[1][1])
    end
function G() return(color (156, 102, h)) end
function R() return(color (369, 260, h)) end
for i = 1, 1000 do
    if G() == 0 then
        a=1
    end
    if R() == 0 then
        a=2
    end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')
log(" ")
t = os.clock()
for i = 1, 1000 do
    if color (229, 233, h) == 0 then
        a=1
    end
    if color (767, 370, h) == 0 then
        a=2
    end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')


У меня вобще так ошибку выдаёт...
Хоть с локальными хоть с глобальными.
Где-то читал что функции не относятся к глобальным в плане обращения к ним если это не происходит из разных областей данных или они не содержат параметры, что и есть тут как мне кажется, хотя.. у меня то вообще ошибку выдаёт)
Т.е.
function G (self, callback, object, ...)
не тоже самое что
function G ()
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 11.6.2020, 17:10
Сообщение #37


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2398
Пользователь №: 18.746



Цитата(Levo222 @ 11.6.2020, 16:57) *
У меня вобще так ошибку выдаёт...

Потому, что вы неправильно скопировали код из примера.


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 17:38
Сообщение #38


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(Fors1k @ 11.6.2020, 21:10) *

Потому, что вы неправильно скопировали код из примера.

Ну да, вроде пошло
Но у меня обратные результаты
Код
--lua
log"clear"
local t = os.clock()
local h = findwindow("Блокнот")[1][1]
function G() return(color (111, 111, h)) end
function R() return(color (111, 111, h)) end
for i = 1, 100 do
    if G() == 0 then
        a=1
    end
    if R() == 0 then
        a=2
    end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')
log("1 ")
local t = os.clock()
for i = 1, 100 do
    if color (111, 111, h) == 0 then
        a=1
    end
    if color (111, 111, h) == 0 then
        a=2
    end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')

через функции работает медленнее чем без них
Цитата
Затрачено времени: 6.641 секунд
Затрачено времени: 6.578 секунд

А как присвоить локальную переменную через color без функции?
т.е
Код
local G = color (100, 100, h) 

почему возвращает данные а не значения цвета? Где-то скобку надо поставить?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.6.2020, 17:50
Сообщение #39


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
local G = color (100, 100, h)

Может надо выкладывать весь код, а не кусок.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 11.6.2020, 18:05
Сообщение #40


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 11.6.2020, 21:50) *

Может надо выкладывать весь код, а не кусок.

Код
local t = os.clock()
local G = color (100, 100, h)
local R = color (200, 200, h)
for i = 1, 10000 do
  if G == 0 then
    a = 1
  else
    if R == 0 then
     a = 2
    else
    end
  end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')


t = os.clock()
for i = 1, 10000 do
  if color (100, 100, h) == 0 then
   b = 1
  else
    if color (200, 200, h) == 0 then
     b = 2
    else
    end
  end
end
log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

5 страниц V < 1 2 3 4 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 21:33
Designed by Nickostyle