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

> Проверка скорости обработки, --данных--
Levo222
сообщение 10.6.2020, 11:34
Сообщение #1


*****

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


Это пара переменных. А если блоков несколько, и они состоят из нескольких десятков сочетающихся между собой? Если ли разница в скорости при выходе за пределы цикла?
Может есть способ замерить милисекунды и погонять чтобы проверить наглядно?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Madeus
сообщение 11.6.2020, 20:29
Сообщение #2


*****

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



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

А по поводу скорости функций поиска цвета, уже объяснили, что это функции winapi и быстрее не получится.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 11.6.2020, 20:49
Сообщение #3


*****

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// глобально только для текущего



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


*****

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 секунд

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

Сообщений в этой теме
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

 

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