|
|
|
Проверка скорости обработки, --данных-- |
|
|
Levo222 |
10.6.2020, 11:34
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Есть ли разница в Lua между скоростью обработки информации внутри цикла в таком формате: Код local G = color (100, 100) local R = color (200, 200) While 1 do if G == 0 then 1 else if R == 0 then 2 else end end end
В отличие от такого:??? Код While 1 do if color (100, 100) == 0 then 1 else if color (200, 200) == 0 then 2 else end end end
Это пара переменных. А если блоков несколько, и они состоят из нескольких десятков сочетающихся между собой? Если ли разница в скорости при выходе за пределы цикла? Может есть способ замерить милисекунды и погонять чтобы проверить наглядно?
|
|
|
|
Levo222 |
10.6.2020, 12:53
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 10.6.2020, 16:21) Если вызываются функции пилота, то скорость вообще нет смысла замерять. Тем более вызов функций, которые получают цвет в экрана, это как минимум 16 мсек, с аэро 33 мсек, с привязкой быстрее, но все-равно это занимает много времени по сравнению с любыми операциями в луа.
Я ничего не понял. Какая разница между функциями Lua и функциями пилота? Вы имеете ввиду старый язык до версии 3.02?
Цитата(cirus @ 10.6.2020, 16:21) с привязкой быстрее
Это касается Delphy или вобще любых операций в пилоте? Я че-то не догоняю: Есть Lua, Есть Lua через пилот, Есть Lua через другие компиляторы. Есть другие языки через Pilot, есть другие языки через другие компиляторы. Какие из функций относятся к медленным независимо от использования того иного языка и относятся чисто к пилоту?
|
|
|
|
Levo222 |
10.6.2020, 14:02
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 10.6.2020, 17:53) Все функции пилота вызываются медленно. Имеется ввиду получение цвета с перекрытого окна.
А не с перекрытого? По поводу привязки имеется ввиду вписывание хэндла в скрипт? Цитата(cirus @ 10.6.2020, 17:53) Код --lua log 'clear' log 'mode compact' local t = os.clock() for i = 1, 10000 do local x = power(2, 5) -- вызов функции пилота end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд') t = os.clock() for i = 1, 10000 do -- можно добавить нулей local x = math.pow(2, 5) -- вызов функции луа end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд') Цитата 1.500 0.000 Ха! я понял) Но ведь color это Lua функция? Не пилота? У родного колора кажется findcolor? А присвоение переменных и циклы также относятся к Lua?
|
|
|
|
cirus |
10.6.2020, 14:43
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26576
Пользователь №: 16.971
Возраст: 29
|
Цитата есть в меню правой кнопки мыши Это где? В редакторе пилота. Цитата Чисто Luaшные функции есть на определение цвета? Нет. Цитата Или это прерогатива пилота? Нет. Это функции winapi. Цитата И есть ли способ ускорить? При получении цвета с экрана нет. Если получать цвет с перекрытого окна, то будет быстрее. Можно через длл https://forum.uokit.com/index.php?showtopic=69910Или так(хотя это тоже что самое что и через длл): Код --lua local ffi = require("ffi") local user, gdi = ffi.load('User32.dll'), ffi.load('Gdi32.dll') ffi.cdef[[ int GetDC(int hWnd); int ReleaseDC(int hWnd, int hDC); unsigned long GetPixel(int hdc, int x, int y); ]] function getpixel(handle, x, y) local HDC = user.GetDC (handle) local color=gdi.GetPixel(HDC, x, y) user.ReleaseDC(handle, HDC) return color end
local result = getpixel(workwindow(), 100, 200) hint (result)
|
|
|
|
Levo222 |
10.6.2020, 14:59
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 10.6.2020, 18:43) В редакторе пилота.
Ну так вот же? (IMG:https://i.ibb.co/JtF5x9r/Image-646.jpg) Там и те функции написаны. color тот же только с хэндлом. То что с хэндлом будет быстрее я понял, только не понял почему, и причем тут перекрытое окно. получается если не использовать color а напрямую проверять цвет в координатах быстрее будет? Т.е. Код if <100,100> <423543> then 1 else end Только так походу работать вообще не будет, функции то нет?
Не тоже самое что Код if color(100, 100) == 423543 then 1 else end И будет быстрее? Цитата(cirus @ 10.6.2020, 18:43) Если получать цвет с перекрытого окна, то будет быстрее.
имеется ввиду если использовать handle? Или вобще прям перекрыть? А в чём трудность то? Есть способ считать окно перекрытым, если оно будет неперекрытым? Т.е обмануть пилот?)
|
|
|
|
Levo222 |
10.6.2020, 15:26
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 10.6.2020, 19:04) Это функции пилота. Встроенные функции луа в пункте Lua.
А ну понятно, их если что можно взять в справке по луа? Т.е. там все поддерживаются пилотом? Или только те что под LuaJit5.1 ? альтернативы coloru я так понимаю нет, кроме dll-ки? Цитата Или так(хотя это тоже что самое что и через длл): Ну я так понял Dll это для тех у кого стандартная функция не работает, а вызывает то она также как и обычная? Насколько быстрее Вобще изначальный вопрос был насколько быстрее скрипт обращается к переменным за циклом обозначающим цвет точек в заданных координатах, чем к тем которые проверяются непосредственно в самом теле цикла? Я так понимаю ничем если используются стандартные функции пилота? Или там минимальная разница? Короче есть 2 варианта ускорения: 1. привязывать handle 2. или... привязать handle))) потмоу что dll по сути тоже самое и разницы в скорости нету? А проблем со стандартной функцией у меня нету, ну разве что мигание окна. Я ниче не понял почему handle делает работу быстрее? Приоритет окна повышает?
|
|
|
|
cirus |
10.6.2020, 15:38
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26576
Пользователь №: 16.971
Возраст: 29
|
Цитата Т.е. там все поддерживаются пилотом? Или только те что под LuaJit5.1 ? Все что для версии 5.1. Цитата Вобще изначальный вопрос был насколько быстрее скрипт обращается к переменным за циклом обозначающим цвет точек в заданных координатах, чем к тем которые проверяются непосредственно в самом теле цикла? Без разницы, если не собираетесь замерять разницу в наносекунды. Цитата Я ниче не понял почему handle делает работу быстрее? Другой принцип получения цвета. Всё просто, есть 2 варианта: 1. Получать цвет с экрана, медленно. 2. Получать цвет напрямую с окна, быстрее. Насколько, зависит от приложения. Хоть функциями пилота, хоть длл, хоть как, всё работает одинакового через функции winapi.
|
|
|
|
cirus |
10.6.2020, 17:58
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26576
Пользователь №: 16.971
Возраст: 29
|
Цитата И еще есть ли способ сразу соотнести handle со всеми переменными с координатами в скрипте? Нет. Неизвестно же какие переменные это координаты, а какие нет. Пишите свою функцию и не надо будет дописывать. Код --lua function _move(x, y) move(x, y, workwindow()) end function _kleft(x, y) kleft(x, y, workwindow()) end
_move(100, 100) wait(1000) _kleft(200, 200) end_script() Цитата А скорость отклика приложения отчего зависит? Не знаю, из предположений от фпс.
|
|
|
|
Levo222 |
10.6.2020, 18:06
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 10.6.2020, 21:58) Не знаю, из предположений от фпс.
Фпс монитора? Или фпс самого приложения? просто они немного разные и очень сильно скачут, особенно фпс приложения, так может оказаться что через непривязанное окно считывает быстрее поскольку фпс экрана менее подвержено изменениям? Цитата(cirus @ 10.6.2020, 21:58) Пишите свою функцию и не надо будет дописывать. Код --lua function _move(x, y) move(x, y, workwindow()) end function _kleft(x, y) kleft(x, y, workwindow()) end
_move(100, 100) wait(1000) _kleft(200, 200) end_script() Дак точек то много, и действий соответственно тоже, там не один Kleft а десятки клавиш.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|