|
|
|
Проверка скорости обработки, --данных-- |
|
|
Levo222 |
11.6.2020, 10:32
|
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?
|
|
|
|
cirus |
11.6.2020, 10:52
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26707
Пользователь №: 16.971
Возраст: 29
|
Цитата причём там нет дочернего окна. У блокнота есть, редактор это дочернее окно. Ctrl+A над заголовком это то что находит findwindow. Цитата Проще говоря мне нужно найти хэндл окна по названию, 1 раз вывести его в лог, а затем сделать рабочим На вики findwindow, первый пример. Цитата Не будет ли это тормозом при обработке Lua событий в теле скрипта после --Lua? Нет. Цитата local G = color (100, 100 h) Все параметры пишутся через запятую. Цитата А я понял там хэндл в каком-то другом формате пишется, с тремя 000, какой из них вписывать? Выбрать отображать десятичные хендлы.
|
|
|
|
Levo222 |
11.6.2020, 11:00
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 11.6.2020, 14:52) У блокнота есть, редактор это дочернее окно. Ctrl+A над заголовком это то что находит findwindow.
Да там не блокнот, но уже понятно что через пример нормально находит Цитата(cirus @ 11.6.2020, 14:52) Выбрать отображать десятичные хендлы.
В этой версии нет десятиричных хэндлов, или я не там смотрю.А всё, там ПКМ по самому числу вид меняет. И еще если я напишу километровое название переменной его обработка отличиться от односимвольного?
|
|
|
|
Levo222 |
11.6.2020, 11:53
|
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 дня ломать рога в поисках проблемы оптимизации какой-нибудь переменной, написанной в неверном формате и приводящей к лагам, которая при озвучивании могла бы уберечь от ненужных действий.
|
|
|
|
Levo222 |
11.6.2020, 12:19
|
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 вроде видел похожие функции
|
|
|
|
Fors1k |
11.6.2020, 13:16
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2383
Пользователь №: 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
--------------------
Для связи
|
|
|
|
Fors1k |
11.6.2020, 14:14
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2383
Пользователь №: 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%.
--------------------
Для связи
|
|
|
|
Fors1k |
11.6.2020, 15:41
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2383
Пользователь №: 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
--------------------
Для связи
|
|
|
|
Cockney |
11.6.2020, 16:10
|
Master
Сообщений: 1.395
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21061
Пользователь №: 16.156
|
Тест не совсем корректен. Под увеличением числа переменных я имел в виду: Код local a_1 local a_2 .... local a_n
и последующие обращение к ним. Касательно областей памяти. Да, они лежат в разных областях памяти. Но именно в данном тесте это скорее всего не так. Что я имею в виду: Код Где лежит 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Код Означает что переменная глобальна для всего скрипта, но из других скриптов она не видна.
|
|
|
|
Levo222 |
11.6.2020, 16:57
|
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 ()
|
|
|
|
Levo222 |
11.6.2020, 17: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) почему возвращает данные а не значения цвета? Где-то скобку надо поставить?
|
|
|
|
Levo222 |
11.6.2020, 18:05
|
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) .. ' секунд')
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|