RayTwitty 587 Опубликовано 2 Декабря 2014 (изменено) sys_ini = system_ini()Что "sys_ini = system_ini()", что и "оптимизации" навроде "math_random = math.random()" - никогда не видел профита от них. Тогда смысл? Изменено 2 Декабря 2014 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 2 Декабря 2014 (изменено) local pt = profile_timer() local sys_ini = system_ini() pt:start() for i = 1, 10000 do sys_ini:r_float("explosion_marks", "dist") end pt:stop() log1("1 ~~~ sys_ini time: "..pt:time()) pt:start() for i = 1, 10000 do system_ini():r_float("explosion_marks", "dist") end pt:stop() log1("2 ~~~ system_ini() time: "..pt:time())В главном меню игры. [12/02/14 14:03:05] 1 ~~~ sys_ini time: 6490.5009765625 [12/02/14 14:03:05] 2 ~~~ system_ini() time: 17246.419921875 [12/02/14 14:03:20] 1 ~~~ sys_ini time: 5242.6943359375 [12/02/14 14:03:20] 2 ~~~ system_ini() time: 13490.841796875 [12/02/14 14:03:31] 1 ~~~ sys_ini time: 5106.6259765625 [12/02/14 14:03:31] 2 ~~~ system_ini() time: 14303.36328125 [12/02/14 14:03:43] 1 ~~~ sys_ini time: 5217.56640625 [12/02/14 14:03:43] 2 ~~~ system_ini() time: 13807.4453125 [12/02/14 14:04:04] 1 ~~~ sys_ini time: 5126.4877929688 [12/02/14 14:04:04] 2 ~~~ system_ini() time: 18833.763671875 [12/02/14 14:04:51] 1 ~~~ sys_ini time: 5214.3110351563 [12/02/14 14:04:52] 2 ~~~ system_ini() time: 13137.846679688 [12/02/14 14:04:57] 1 ~~~ sys_ini time: 5111.0854492188 [12/02/14 14:04:57] 2 ~~~ system_ini() time: 12934.647460938 [12/02/14 14:04:57] 1 ~~~ sys_ini time: 5214.4775390625 [12/02/14 14:04:57] 2 ~~~ system_ini() time: 13486.434570313Разница конечно есть, в среднем 5 миллисекунд... Но учитывая, что это всего лишь 1/8 времени апдейта актора, да и читать 10 тыс. параметров вряд ли кто будет - полезность этой оптимизации стремится к нулю. local pt = profile_timer() local math_random = math.random pt:start() for i = 1, 10000 do math_random(5) end pt:stop() log1("1 ~~~ math_random time: "..pt:time()) pt:start() for i = 1, 10000 do math.random(5) end pt:stop() log1("2 ~~~ math.random time: "..pt:time())Результаты: [12/02/14 14:20:31] 1 ~~~ math_random time: 456.19830322266 [12/02/14 14:20:31] 2 ~~~ math.random time: 1170.6983642578 [12/02/14 14:20:44] 1 ~~~ math_random time: 434.591796875 [12/02/14 14:20:44] 2 ~~~ math.random time: 1108.9953613281 [12/02/14 14:20:55] 1 ~~~ math_random time: 429.08001708984 [12/02/14 14:20:55] 2 ~~~ math.random time: 1104.5678710938 [12/02/14 14:21:25] 1 ~~~ math_random time: 434.51354980469 [12/02/14 14:21:25] 2 ~~~ math.random time: 1108.9071044922 [12/02/14 14:21:27] 1 ~~~ math_random time: 437.62692260742 [12/02/14 14:21:27] 2 ~~~ math.random time: 1111.55102539060.7 миллисекунд на 10 тыс. генераций Вообщем, как обычно, в синтетических тестах вроде как изменения какие-то есть, но на деле роли не играют совершенно. Кривость кода надо в других местах лечить, а не подобными "оптимизациями". Изменено 2 Декабря 2014 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 23 Ноября 2015 (изменено) @Dennis_Chikin, function has_alife_info(info_id) local sim = alife() return info_id ~= "" and sim and sim:has_info(0, info_id) endХотя смысла лишний раз проверять наличие симулятора по большому счету и нет. Изменено 23 Ноября 2015 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 23 Ноября 2015 (изменено) Проверка на sim ЗДЕСЬ - по тому что если вызвали, а alife() еще нетЭто когда такие случаи были? До загрузки игры? Не имею возможности сейчас посмотреть места вызовов конктруктора и деструктора симулятора, но скорее всего, он доступен даже когда актор в оффлайне. function has_alife_info(info_id) return info_id ~= "" and alife():has_info(0, info_id) end info_id ~= "" - если подобное вызвали - у нас где-то проблемыНеявно может быть и пустая строка. Такое вполне вероятно, по крайней мере намного вероятнее, чем вызов из главного меню до загрузки игры Изменено 23 Ноября 2015 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 24 Ноября 2015 (изменено) Так как непонятно, к кому обращается @Dennis_Chikin (неплохо было бы использовать цитирование), но вроде как ко мне, отвечу: По тому что где-то в xr_logic.чего-то() или еше в каких диалогах требуют строго true или строго false. info_id ~= "" and alife():has_info(0, info_id)по твоему это не булевое?)) Вот опять же плохо по той же причине: в 99% случаев у тебя есть актор, и 146% гарантии, что без него до сюда не дойдет. Вот и можно писать сразу actor:has_info(info_id), не через 10 скриптов и 20 проверок.Если как ты говоришь, актор почти всегда есть и ты его не проверяешь, то зачем нужна проверка алайфа? В каких случаях есть алайф, но нет актора?)) а info_id ~= "" лишнее так как невозможно написать has_alife_info("")Почему ты так уверен? А если строка генерируется не вручную, а каким-нибудь генератором? Мало ли какие сбои. Если в lua правильно сделано сравнение строк, то никаких внутренних затрат на сравнения не потребуется, функция почти сразу выйдет с результатом. Изменено 24 Ноября 2015 пользователем RayTwitty Поделиться этим сообщением Ссылка на сообщение