|
Проверка скорости обработки, --данных-- |
|
|
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
Это пара переменных. А если блоков несколько, и они состоят из нескольких десятков сочетающихся между собой? Если ли разница в скорости при выходе за пределы цикла? Может есть способ замерить милисекунды и погонять чтобы проверить наглядно?
|
|
|
|
|
  |
Ответов
Madeus |
11.6.2020, 20:29
|

    
Journeyman
Сообщений: 317
Регистрация: 19.11.2019 Группа: Пользователи Наличность: 10951
Пользователь №: 19.451
Возраст: 32

|
Цитата из книги: "Хороший стиль программирования заключается в применении локальных переменных везде, где это возможно. Локальные переменные помогают вам избежать засорения глобального окружения ненужными именами. Более того, доступ к локальной переменной быстрее, чем к глобальной. И наконец, локальная переменная перестает существовать,как только заканчивается ее область видимости, позволяя сборщику мусора освободить память, занимаемую ее значением."
А по поводу скорости функций поиска цвета, уже объяснили, что это функции winapi и быстрее не получится.
|
|
|
|
Fors1k |
11.6.2020, 20:49
|

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

|
Цитата(Madeus @ 11.6.2020, 20:29)  "Более того, доступ к локальной переменной быстрее, чем к глобальной." Здесь мы убедились, что это не так. Цитата(Madeus @ 11.6.2020, 20:29)  "Локальные переменные помогают вам избежать засорения глобального окружения ненужными именами. И наконец, локальная переменная перестает существовать,как только заканчивается ее область видимости, позволяя сборщику мусора освободить память, занимаемую ее значением." Это все логично, и очевидно, только если у нас код не 10 строк, в котором всего одна область видимости. Цитата(Madeus @ 11.6.2020, 20:29)  "Хороший стиль программирования заключается в применении локальных переменных везде, где это возможно." Естественно. Вот тут, конечно, создатели lua странные ребята. В других языках переменные всегда автоматически являются локальными, что бы не было как в луа, где модификатор local занимает кода как сама бизнес-логика. Цитата(Levo222 @ 11.6.2020, 20:34)  не пытаться опровергнуть то, чего не требуется? Кому не требуется? Было предположение о том, что доступ к локальным переменным быстрее, чем к глобальным. Мне стало интересно, и я проверил это тестом. Не понимаю, о чем вы. Цитата(Levo222 @ 11.6.2020, 20:34)  А в чём проблема использовать локальные данные Вам уже объяснили, что если в наивысшей области видимости написать local, то данные все равно будут глобальными: Цитата(Cockney @ 11.6.2020, 19:06)  --lua a = 0 // глобально для всех скриптов local b = 0// глобально только для текущего
--------------------
Для связи
|
|
|
|
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 Проверка скорости обработки 10.6.2020, 11:34 cirus
Если вызываются функции пилота, то скорость вообщ... 10.6.2020, 12:21 Levo222
Если вызываются функции пилота, то скорость вообщ... 10.6.2020, 12:53 Levo222
много времени по сравнению с любыми операциями в... 10.6.2020, 14:17 Levo222
минимум 16 мсек, с аэро 33 мсек, с привязкой быст... 10.6.2020, 17:51 cirus Все функции пилота вызываются медленно.
--lua
log ... 10.6.2020, 13:53 Levo222
Все функции пилота вызываются медленно.
Имеется в... 10.6.2020, 14:02 cirus
Нет. https://uopilot.uokit.com/wiki/index.php?tit... 10.6.2020, 14:13 Levo222
есть в меню правой кнопки мыши
Это где? 10.6.2020, 14:34 cirus
В редакторе пилота.
Нет.
Нет. Это функции wina... 10.6.2020, 14:43 Levo222
В редакторе пилота.
Ну так вот же?
[img]https:/... 10.6.2020, 14:59 cirus
Это функции пилота. Встроенные функции луа в пунк... 10.6.2020, 15:04 Levo222
Это функции пилота. Встроенные функции луа в пунк... 10.6.2020, 15:26 cirus
Все что для версии 5.1.
Без разницы, если не соб... 10.6.2020, 15:38 Levo222
зависит от приложения.
А скорость отклика прилож... 10.6.2020, 17:19  Levo222 И еще есть ли способ сразу соотнести handle со все... 10.6.2020, 17:33 cirus
Нет. Неизвестно же какие переменные это координат... 10.6.2020, 17:58 Levo222
Не знаю, из предположений от фпс.
Фпс монитора? ... 10.6.2020, 18:06 Levo222
какие переменные это координаты, а какие нет.
... 10.6.2020, 18:32 Levo222 Так, как привязать handle через Lua? Там же другой... 11.6.2020, 10:14 cirus
Какой пример нужен? Напишите на старом синтаксисе... 11.6.2020, 10:19 Levo222
Какой пример нужен? Напишите на старом синтаксисе... 11.6.2020, 10:32 cirus
У блокнота есть, редактор это дочернее окно. Ctrl... 11.6.2020, 10:52 Levo222
У блокнота есть, редактор это дочернее окно. Ctrl... 11.6.2020, 11:00 cirus
Что мешает проверить? Запустите цикл на миллиард ... 11.6.2020, 11:10 Levo222
Что мешает проверить? Запустите цикл на миллиард ... 11.6.2020, 11:53 cirus Код ошибочный. В первом цикле цвет не проверяется,... 11.6.2020, 12:05 Levo222
Код ошибочный. В первом цикле цвет не проверяется... 11.6.2020, 12:19  Fors1k Как будет выглядеть нормальный код?)
--lua
log... 11.6.2020, 13:16   Levo222
set hotkeystart {End}
--lua
log 'clear' ... 11.6.2020, 16:57    Fors1k У меня вобще так ошибку выдаёт...
Потому, что вы н... 11.6.2020, 17:10     Levo222
Потому, что вы неправильно скопировали код из при... 11.6.2020, 17:38   Levo222
[code]--lua
log"clear"
t = os.clock(... 11.6.2020, 22:16    Cockney
Ага, осталось рзобраться почему вопреки:
Ваш в... 11.6.2020, 22:25     Levo222
Ваш вопрос не относится к тому что я привел. У Ва... 11.6.2020, 22:29 Levo222
Все функции, которые работают с цветом
А вот что... 11.6.2020, 12:53 cirus Если уж речь идет о скорости, то не используйте гл... 11.6.2020, 13:36 Fors1k
Если уж речь идет о скорости, то не используйте г... 11.6.2020, 14:14  Cockney
Работа с глобальными переменными оказалась быстре... 11.6.2020, 14:56   Fors1k На сколько понимаю - это частный случай.Тоже так д... 11.6.2020, 15:41 Cockney Тест не совсем корректен. Под увеличением числа пе... 11.6.2020, 16:10 cirus
Может надо выкладывать весь код, а не кусок. 11.6.2020, 17:50 Levo222
Может надо выкладывать весь код, а не кусок.
loc... 11.6.2020, 18:05 Fors1k Тест не совсем корректен.Не совсем корректен относ... 11.6.2020, 18:06 Levo222
Тест проводился для проверки фразы:
Надо проводи... 11.6.2020, 18:31 Cockney
Не совсем корректен относительно чего?
Тест пров... 11.6.2020, 19:03 Cockney
Нет, здесь уже две области памяти. Следует отлич... 11.6.2020, 19:06 Madeus Что-то мне подсказывает что результаты не совсем к... 11.6.2020, 18:49 Fors1k больше похожи на погрешность.
Да, я тоже к этому с... 11.6.2020, 19:05  Levo222
Практически одинаковые результаты, но global поче... 11.6.2020, 19:21   Fors1k Не знаю, что за патчи, у меня самый обычный пилот)... 11.6.2020, 19:29    Levo222
Не знаю, что за патчи, у меня самый обычный пилот... 11.6.2020, 19:33     Fors1k У меня то есть
Ну запустите еще раз, получите друг... 11.6.2020, 19:47      Levo222
Разницы в скорости нет. Вот, запустите этот код(... 11.6.2020, 20:00 cirus
Проводите нормальные тесты:
11.6.2020, 19:36 Levo222
большой объем таких переменных.
Дак каких таких ... 11.6.2020, 19:49 Madeus Global Var: 0.01815 секунд
Loacal Var: 0.0... 11.6.2020, 20:12 Fors1k Ну вот мы и убедились, что разницы в скорости нет)... 11.6.2020, 20:14 Levo222
что является погрешностью.
Это не погрешность
по... 11.6.2020, 20:19  Fors1k
Это не погрешность
погрешностью я называю когда т... 11.6.2020, 20:27   Levo222
Даже не знаю, как это комментировать.
Да я напис... 11.6.2020, 20:34  Madeus
Здесь мы убедились, что это не так.
Я склоняюсь... 11.6.2020, 20:50 cirus
Потому что t1 = os.clock() не обнуляется в цикле. 11.6.2020, 21:14 Levo222
Потому что t1 = os.clock() не обнуляется в цикле.... 11.6.2020, 21:34 Cockney Вопрос скорости можно закрыть изучением данного тр... 11.6.2020, 22:02 Cockney Во-первых, функций луа в коде я не увидел. Во-втор... 11.6.2020, 22:35 Levo222
Во-первых, функций луа в коде я не увидел.
А эт... 11.6.2020, 22:38  Cockney
А как определить их иначе?
Я же это твопрос с сам... 11.6.2020, 22:42   Levo222 АААААААААА ВСЁ РАЗОБРАЛСЯ!!!! ))0
... 11.6.2020, 22:49    Cockney
Можно, а зачем тогда использовать Lua? Если он ни... 11.6.2020, 22:56     Levo222
О чем вообще речь ? какое падение в 2 раза ?
Я н... 11.6.2020, 22:58     Fors1k [quote name='Cockney' post='437494' date='11.6.202... 11.6.2020, 23:31 Cockney Разумеется оно теряется. Что тут происходит:
1) И... 11.6.2020, 23:01 Levo222
а привязывайте его по Ctrl+A.
Так я так всю жиз... 11.6.2020, 23:22 cirus Проверять color на блокноте это изначально бредова... 11.6.2020, 23:03 Cockney
В сравнении с тем что тратится на получение цвета... 11.6.2020, 23:05 cirus
Потому что такой код не имеет смысла, присвоить з... 11.6.2020, 23:27 Levo222
а потом её в цикле сравнивать.
Не сравнивать а ... 11.6.2020, 23:31  Cockney
Не сравнивать а проверять
Интересное мнение
... 12.6.2020, 0:03   Levo222
Никто не мешает присваивать в G() и проверять там... 12.6.2020, 0:13 Cockney В чем смысл ? зачем ? какие переменные ? 12.6.2020, 14:29 Levo222 Чтобы соотнести их с точками запроса colora. Своег... 12.6.2020, 15:44 cirus Если нормально написать что хотите сделать, то бол... 12.6.2020, 15:49 Fors1k Если нормально написать что хотите сделать, то бол... 12.6.2020, 15:52  Levo222
Я, наконец-то понял чего он хочет.
После:--lua
... 12.6.2020, 16:19 Levo222
Если нормально написать что хотите сделать, то бо... 12.6.2020, 16:05 cirus
Нет конечно. 12.6.2020, 16:25 Levo222
Нет конечно.
Ну findwindow же стандартная функци... 12.6.2020, 16:27 cirus
Она вызывается 1 раз вначале скрипта и всё. 12.6.2020, 16:30 Levo222
Она вызывается 1 раз вначале скрипта и всё.
Это ... 12.6.2020, 16:45 cirus
Куда и что вписывать? Функция findwindow для того... 12.6.2020, 17:22 Levo222
Куда и что вписывать? Функция findwindow для того... 12.6.2020, 18:03 cirus
Что значит хуже? 12.6.2020, 18:09 Levo222
Что значит хуже?
Это значит что там больше косты... 12.6.2020, 18:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|