Desertir 202 Опубликовано 2 Декабря 2014 (изменено) , а разве таймер сбрасывается после pt:stop() или pt:start()? Если нет, то разница посчитана неверно, она вообще будет ничтожной Если все таки сбрасывается, пардонте. Сейчас еще раз посмотрел, если вы боретесь за мс, то стОит делать переменные глобальными, как в _g.script, а не как в тестах, хотя что тут говорить, оптимизировать надо явно другие места, это действительно нужно только для рефакторинга. Изменено 2 Декабря 2014 пользователем Desertir ТЧ 1.0004. SAP и Trans mod github Поделиться этим сообщением Ссылка на сообщение
Desertir 202 Опубликовано 2 Декабря 2014 (изменено) Забавы ради вот вам 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 Изменено 2 Декабря 2014 пользователем Desertir ТЧ 1.0004. SAP и Trans mod github Поделиться этим сообщением Ссылка на сообщение