|
|
  |
Проверка скорости обработки, --данных-- |
|
|
Levo222 |
11.6.2020, 21:03
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
Цитата(Fors1k @ 12.6.2020, 0:49)  Было предположение о том, что доступ к локальным переменным быстрее, чем к глобальным. Вам уже объяснили, что если в наивысшей области видимости написать local, то данные все равно будут глобальными:
Так и есть. Я вашим же скриптом еще раз прогнал свой код и что получил средним арифметическим значением скорость локальных выше) Код [s]Глобальные 3.812 секунд[/s] Первый запуск показывает бОльшую цифру, поэтому тест можно не учитывать. Глобальные 3.797 секунд Глобальные 3.688 секунд Глобальные 3.703 секунд Глобальные 3.765 секунд Глобальные 3.688 секунд
Локальные 3.796 секунд Локальные 3.704 секунд Локальные 3.703 секунд Локальные 3.797 секунд Локальные 3.703 секунд Локальные 3.703 секунд Убираем всё лишнее, и рассчитываем среднее: Глобальные общее время 4453 / локальные 4406 т.е. разница 2% минимум. Но на больших этапах % будет увеличиваться в геометрической прогрессии, т.к. разница между числами наглядна и очевидна.Вобщем-то да - одинаковые. Цитата(Fors1k @ 12.6.2020, 0:49)  Вам уже объяснили, что если в наивысшей области видимости написать local, то данные все равно будут глобальными:
Для чего конкретно? Я всегда пишу локальные внутри цикла или непосредственно за ними? Я уже в этом убедился, хотя не понял почему так. Код --lua log"clear"log"mode compact" local t1 = os.clock() local F = findwindow("Блокнот")[1][1] local function A() return(color (111, 111, F)) end local function B() return(color (111, 111, F)) end
for k=1,6 do t = os.clock() h = findwindow("Блокнот")[1][1] function G() return(color (111, 111, h)) end function R() return(color (111, 111, 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) .. ' секунд') end
for k=1,6 do for i = 1, 1000 do if A() == 0 then a=1 end if B() == 0 then a=2 end end log ('Локальные: ' .. string.format("%.3f", os.clock() - t1) .. ' секунд') end Цитата Глобальные: 3.859 секунд А это первый запуск, поэтому цифра такая большая... Глобальные: 3.813 секунд Глобальные: 3.969 секунд Глобальные: 3.796 секунд Глобальные: 3.875 секунд Глобальные: 3.735 секунд
Локальные: 26.750 секунд Локальные: 30.578 секунд Локальные: 34.281 секунд Локальные: 38.000 секунд Локальные: 41.812 секунд Локальные: 45.547 секунд
Но есть ли решение? --------------- Что-то чушь Какая-то получается: Код --lua log"clear"log"mode compact"
for k=1,6 do t = os.clock() h = findwindow("Блокнот")[1][1] function G() return(color (111, 111, h)) end function R() return(color (111, 111, 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) .. ' секунд') end
t1 = os.clock() F = findwindow("Блокнот")[1][1] function A() return(color (111, 111, F)) end function B() return(color (111, 111, F)) end for k=1,6 do for i = 1, 1000 do if A() == 0 then a=1 end if B() == 0 then a=2 end end log ('Локальные: ' .. string.format("%.3f", os.clock() - t1) .. ' секунд') end Цитата Глобальные: 3.906 секунд Глобальные: 3.688 секунд Глобальные: 3.734 секунд Глобальные: 3.844 секунд Глобальные: 3.734 секунд Глобальные: 3.813 секунд
Локальные: 3.812 секунд Локальные: 7.547 секунд Локальные: 11.375 секунд Локальные: 15.078 секунд Локальные: 18.750 секунд Локальные: 22.578 секунд Каждая послеующая обработка глобальных данных перед циклом увеличивает их время в прогресии
|
|
|
|
Levo222 |
11.6.2020, 21:34
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
Цитата(cirus @ 12.6.2020, 1:14)  Потому что t1 = os.clock() не обнуляется в цикле.
Ну да. Кстати, если посмотреть на одинаковую обработку данных то можно увидеть схожесть во времени обработки определённого типа данных Цитата Глобальные: 3.953 секунд Глобальные: 3.860 секунд Глобальные: 3.859 секунд Глобальные: 3.875 секунд Глобальные: 3.844 секунд Глобальные: 3.859 секунд
Локальные: 3.844 секунд Локальные: 3.844 секунд Локальные: 3.844 секунд Локальные: 3.859 секунд Локальные: 3.859 секунд Локальные: 3.875 секунд Т.е. у нас и там и там присутствуют одинаковые данные и они повторяются, т.е. при обработке определённой информации одинаковы, как если бы влияло не время, а сложность обработки.... Вот скажем 844 встречается и там и там, как и 859, как и 875, но глобальные переменные первыми берут на себя нагрузку при запуске скрипта для инициализации переменных, возможно поэтому некоторые первые данные выше по времени тех что производятся ниже.
|
|
|
|
Levo222 |
11.6.2020, 22:16
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
Цитата(Fors1k @ 11.6.2020, 17:16)  Код --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 секунд
а почему у меня Цитата Затрачено времени: 4.157 секунд Затрачено времени: 5.500 секунд ? С привязкой: Код --lua log"clear" t = os.clock() h = findwindow("Блокнот")[1][1] function G() return(color (111, 111, h)) end function R() return(color (111, 111, 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 (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) .. ' секунд') Код Затрачено времени: 3.625 секунд Затрачено времени: 3.516 секунд Без привязки: Код --lua log"clear" t = os.clock() local h = findwindow("Блокнот")[1][1] local function G() return(color (111, 111)) end local function R() return(color (111, 111)) 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 (111, 111) == 0 then a=1 end if color (111, 111) == 0 then a=2 end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд') Код Затрачено времени: 0.375 секунд Затрачено времени: 0.359 секунд У меня что экран волшебный? Цитата(Cockney @ 12.6.2020, 2:02)  Ага, осталось рзобраться почему вопреки: Цитата(cirus @ 10.6.2020, 18:43)  Если получать цвет с перекрытого окна, то будет быстрее.
У меня скорость чтения с экрана выше чем с привязанного окна? Может потому что он не делал его workwindow?... Ну да. Только вот всё-равно: Код t = os.clock() for i = 1, 1000 do if color (111, 111) == 0 then a=1 end if color (111, 111) == 0 then a=2 end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд') Быстрее чем Код local h = findwindow ("Блокнот") if h then workwindow (h[1][1]) end local function G() return(color (111, 111, h)) end local function R() return(color (111, 111, 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) .. ' секунд') на 30% Затрачено времени: 0.360 секунд Затрачено времени: 0.484 секунд
|
|
|
|
Levo222 |
11.6.2020, 22:29
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
Цитата(Cockney @ 12.6.2020, 2:25)  Ваш вопрос не относится к тому что я привел. У Вас вопрос, относящийся к внутренностям пилота. Не луа.
Ну относится, я же спрашиваю есть ли что-то в Lua, что может ускорить работу функций пилота, или обойти их т.е. быть быстрее чем: Код local t1 = os.clock() for i = 1, 1000 do if color (111, 111) == 0 then a=1 end if color (111, 111) == 0 then a=2 end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t1) .. ' секунд') Пока что функции луа только замедляют работу пилота, как видно выше)
|
|
|
|
Levo222 |
11.6.2020, 22:38
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
Цитата(Cockney @ 12.6.2020, 2:35)  Во-первых, функций луа в коде я не увидел.
А это что? Код function G() return(color (156, 102, h)) end Функция пилота чтоли? У него нет таких функций, насколько я помню. Цитата(Cockney @ 12.6.2020, 2:35)  Что за задача, где разница 124мс критична ?
Неважно, где 124, там через минуту 30 секунд. Цитата(Cockney @ 12.6.2020, 2:35)  П.с. второй вариант замедлен за счет оберток G(), R(). На их вызов тратится время
А как определить их иначе? Я же это твопрос с самого начала треда тут и мусолю))))))))))))
|
|
|
|
Levo222 |
11.6.2020, 22:49
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
АААААААААА ВСЁ РАЗОБРАЛСЯ!!!! ))0 всЁЁЁЁ вРЕМЯ ТЕРЯЕТСЯ ПРИ ОБРАЩЕНИИ К Код local h = findwindow ("Блокнот") if h then workwindow (h[1][1]) end вот тебе и потерянные 30% Как заменить это на функцию?
|
|
|
|
Levo222 |
11.6.2020, 22:58
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
Цитата(Cockney @ 12.6.2020, 2:56)  О чем вообще речь ? какое падение в 2 раза ? Я не знаю что ответить. Ну напишите на языке пилота или ассемблере, будет, наверное, лучше. Или приведите пример готового кода и спросите - ускорить можно или нет ? Вот, так оно лучше будет.
АААААААААААААААА ВСССССССССЁЁЁЁЁЁЁЁЁЁЁЁЁ Цитата АААААААААА ВСЁ РАЗОБРАЛСЯ!!!! ))0 всЁЁЁЁ вРЕМЯ ТЕРЯЕТСЯ ПРИ ОБРАЩЕНИИ К Код local h = findwindow ("Блокнот") if h then workwindow (h[1][1]) end вот тебе и потерянные 30% Как заменить это на функцию?
|
|
|
|
cirus |
11.6.2020, 23:03
|

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

|
Проверять color на блокноте это изначально бредовая идея. Кстати, если бы кто-то читал вниматльнее, то я сразу написал, что скорость работы color с привязкой к окну зависит от приложения. Привяжись к 3d приложению или к браузеру и посмотри разницу: Код --lua log'clear' log 'mode compact' function R(x, y, h) return(color (x, y, h)) end
local t = os.clock() for i = 1, 100 do if color (111, 111) == 0 then end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд\r\n')
t = os.clock() for i = 1, 100 do if R(111, 111, workwindow()) == 0 then end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд') Цитата П.с. второй вариант замедлен за счет оберток G(), R(). На их вызов тратится время. В сравнении с тем что тратится на получение цвета это вообще ничто. Цитата Можно, а зачем тогда использовать Lua? Если он никакой прибавки не даёт. Функции пилота работают одинаково. Хоть на старом языке пилота, хоть на луа. Что тут непонятного? Если вызываем функцию color, то на её вызов и работу уйдет одинаково времени.
|
|
|
|
Levo222 |
11.6.2020, 23:22
|
    
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689

|
Цитата(Cockney @ 12.6.2020, 3:01)  а привязывайте его по Ctrl+A.
Так я так всю жизнь и делал, но вот сегодня меня тут ввели в заблуждение, сказав что надо привязывать окно а то оно не будет быстро искать. А как же я раньше искал если это всё работало? Я ничего не понимаю. Цитата Привяжись к 3d приложению или к браузеру и посмотри разницу: привязался, разницы нету почти +100 мс, и при просадках ФПС до 200/300 Я спросил почему Код 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 не работает такой формат, а именно почему не возвращает цвет из переменной, потому что хотелось бы проще для глаз без нагромождения Цитата(cirus @ 12.6.2020, 3:03)  --lua log'clear' log 'mode compact' function R(x, y, h) return(color (x, y, h)) end
local t = os.clock() for i = 1, 100 do if color (111, 111) == 0 then end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд\r\n')
t = os.clock() for i = 1, 100 do if R(111, 111, workwindow()) == 0 then end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд')
Цитата Затрачено времени: 0.031 секунд
Затрачено времени: 3.375 секунд Да всё... Код --lua log'clear' log 'mode compact' local function R(x, y, h) return(color (x, y, h)) end
for k=1,6 do local t = os.clock() for i = 1, 100 do if color (111, 111) == 0 then end end log ('color: ' .. string.format("%.3f", os.clock() - t) .. ' секунд\r\n') end
for k=1,6 do local t1 = os.clock() for i = 1, 100 do if R(111, 111) == 0 then end end log ('R: ' .. string.format("%.3f", os.clock() - t1) .. ' секунд') end Код color: 0.031 секунд color: 0.031 секунд color: 0.016 секунд color: 0.031 секунд color: 0.047 секунд color: 0.016 секунд Код R: 0.031 секунд R: 0.047 секунд R: 0.031 секунд R: 0.031 секунд R: 0.047 секунд R: 0.031 секунд Чё я туплю короче)
|
|
|
|
Fors1k |
11.6.2020, 23:31
|

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

|
off
Цитата(Cockney @ 11.6.2020, 22:56)  О чем вообще речь ? Тоже часто задаюсь этим вопросом) Цитата(Cockney @ 11.6.2020, 22:02)  Moreover, the access to local variables is faster than to global ones. Ну, это я видел, и вот мои мысли на этот счет. Local - понятие относительное, а не абсолютное. Как я понимаю, эта фраза не относится к переменным из наивысшей области видимости. Цитата(cirus @ 11.6.2020, 23:03)  скорость работы color с привязкой к окну зависит от приложения. Привяжись к 3d приложению cirus прав. Тест для блокнота: Исходный код --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, 100 do if G() == 0 then a=1 end if R() == 0 then a=2 end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд') t = os.clock() for i = 1, 100 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) .. ' секунд') Цитата Затрачено времени: 1.230 секунд Затрачено времени: 1.389 секунд Тест для браузера: Исходный код --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, 100 do if G() == 0 then a=1 end if R() == 0 then a=2 end end log ('Затрачено времени: ' .. string.format("%.3f", os.clock() - t) .. ' секунд') t = os.clock() for i = 1, 100 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) .. ' секунд') Цитата Затрачено времени: 0.688 секунд Затрачено времени: 0.860 секунд Цитата(Cockney @ 11.6.2020, 22:35)  второй вариант замедлен за счет оберток G(), R(). На их вызов тратится время. Кстати, у меня в обоих случаях вызов из обертки быстрее.
--------------------
Для связи
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|