Перейти к контенту

Рефакторинг: _g.script


Рекомендуемые сообщения

, а разве таймер сбрасывается после pt:stop() или pt:start()? Если нет, то разница посчитана неверно, она вообще будет ничтожной :) Если все таки сбрасывается, пардонте.

Сейчас еще раз посмотрел, если вы боретесь за мс, то стОит делать переменные глобальными, как в _g.script, а не как в тестах, хотя что тут говорить, оптимизировать надо явно другие места, это действительно нужно только для рефакторинга.

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение

Забавы ради вот вам

local c = get_console()
local log = function(v) c:execute(v) end
local pt = profile_timer()
_G.global_rnd = math.random
local local_rnd = math.random
rnd = math.random

pt:start()
for i = 1, 10000 do
	math.random(5)
end
pt:stop()
log("math.random:"..pt:time())

pt = profile_timer()
pt:start()
for i = 1, 10000 do
	_G.global_rnd(5)
end
pt:stop()
log("_G.global_rnd:"..pt:time())

pt = profile_timer()
pt:start()
for i = 1, 10000 do
	global_rnd(5)
end
pt:stop()
log("global_rnd:"..pt:time())

pt = profile_timer()
pt:start()
for i = 1, 10000 do
	local_rnd(5)
end
pt:stop()
log("local_rnd:"..pt:time())

pt = profile_timer()
pt:start()
for i = 1, 10000 do
	rnd(5)
end
pt:stop()
log("rnd:"..pt:time())

 

 

math.random:    578.04058837891
_G.global_rnd:	600.54803466797
global_rnd:	576.27471923828
local_rnd:	398.26226806641
rnd:		487.28372192383

math.random:	656.1162109375
_G.global_rnd:	597.26733398438
global_rnd:     598.79229736328
local_rnd:	393.96237182617
rnd:		448.24282836914

math.random:	673.52966308594
_G.global_rnd:	606.00970458984
global_rnd:	579.37286376953
local_rnd:	393.57550048828
rnd:		460.28140258789

math.random:	670.90179443359
_G.global_rnd:	661.83203125
global_rnd:	569.04602050781
local_rnd:	423.73452758789
rnd:		426.40435791016

math.random:	610.52740478516
_G.global_rnd:	586.79565429688
global_rnd:	583.48901367188
local_rnd:	405.59097290039
rnd:		459.96835327148

 

 

Видим, что "родное" обращение, как и объявление ее глобальной + обращение через _G или просто по имени в целом одинаковы.

Локальные несколько быстрее, но это все ерунда.

Вот систим_ини

local c = get_console()
local log = function(v) c:execute(v) end
_G.gsi = system_ini()
local si = system_ini()

local pt = profile_timer()
pt:start()
for i = 1, 10000 do
	system_ini():r_float("explosion_marks", "dist")
end
pt:stop()
log("system_ini():"..pt:time())

pt = profile_timer()
pt:start()
for i = 1, 10000 do
	gsi:r_float("explosion_marks", "dist")
end
pt:stop()
log("_G.gsi:"..pt:time())

pt = profile_timer()
pt:start()
for i = 1, 10000 do
	si:r_float("explosion_marks", "dist")
end
pt:stop()
log("si:"..pt:time()) 

 

 

system_ini():	7409.6904296875
_G.gsi:		5028.5361328125
si:		4695.3427734375

system_ini():	8477.212890625
_G.gsi:		4900.01953125
si:		4699.5888671875

system_ini():	7485.7944335938
_G.gsi:		4935.0239257813
si:		4756.3041992188

system_ini():	8623.6474609375
_G.gsi:		4963.302734375
si:		4659.6748046875

system_ini():	7239.9951171875
_G.gsi:		4911.7875976563
si:		4597.4228515625 

 

 

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...