| 
		
	
		 | 
		   | 
	 
 
	
	
	
	
	   Проверка скорости обработки, --данных--  | 
	 
	    
	  | 
	           | 
	 
   
	 
  
 
	
		| Levo222 | 
		
			
			
				   11.6.2020, 10:32
			 
			
			
		 | 
	 
	
		
        	
  
        		     
  
        		Journeyman 
        		Сообщений: 411 
        		Регистрация: 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         		Группа: Пользователи Наличность: 26043         		
        		Пользователь №: 16.971 
Возраст: 29
  
        		 
        	 
        	   
        | 
       
			
			Цитата причём там нет дочернего окна. У блокнота есть, редактор это дочернее окно. Ctrl+A над заголовком это то что находит findwindow. Цитата Проще говоря мне нужно найти хэндл окна по названию, 1 раз вывести его в лог, а затем сделать рабочим На вики findwindow, первый пример. Цитата Не будет ли это тормозом при обработке Lua событий в теле скрипта после --Lua? Нет. Цитата local G = color (100, 100 h) Все параметры пишутся через запятую. Цитата А я понял там хэндл в каком-то другом формате пишется, с тремя 000, какой из них вписывать? Выбрать отображать десятичные хендлы.  
			
			
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
	
		| Levo222 | 
		
			
			
				   11.6.2020, 11:00
			 
			
			
		 | 
	 
	
		
        	
  
        		     
  
        		Journeyman 
        		Сообщений: 411 
        		Регистрация: 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 
        		Сообщений: 411 
        		Регистрация: 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 
        		Сообщений: 411 
        		Регистрация: 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         		Группа: Пользователи Наличность: 0         		
        		Пользователь №: 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         		Группа: Пользователи Наличность: 0         		
        		Пользователь №: 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         		Группа: Пользователи Наличность: 0         		
        		Пользователь №: 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.404 
        		Регистрация: 22.6.2013         		Группа: Пользователи Наличность: 22675         		
        		Пользователь №: 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 
        		Сообщений: 411 
        		Регистрация: 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 
        		Сообщений: 411 
        		Регистрация: 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 
        		Сообщений: 411 
        		Регистрация: 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  
 
        				  
  | 
 |