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

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


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

(изменено)

sys_ini = system_ini()

Что "sys_ini = system_ini()", что и "оптимизации" навроде "math_random = math.random()" - никогда не видел профита от них. Тогда смысл? Изменено пользователем Shadows

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


Ссылка на сообщение
(изменено)

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.5510253906
0.7 миллисекунд на 10 тыс. генераций  :D

 

Вообщем, как обычно, в синтетических тестах вроде как изменения какие-то есть, но на деле роли не играют совершенно. Кривость кода надо в других местах лечить, а не подобными "оптимизациями".

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

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


Ссылка на сообщение
(изменено)

@Dennis_Chikin,

function has_alife_info(info_id)
	local sim = alife()
	return info_id ~= "" and sim and sim:has_info(0, info_id)
end
Хотя смысла лишний раз проверять наличие симулятора по большому счету и нет. Изменено пользователем RayTwitty

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


Ссылка на сообщение
(изменено)

Проверка на sim ЗДЕСЬ - по тому что если вызвали, а alife() еще нет

Это когда такие случаи были? До загрузки игры? Не имею возможности сейчас посмотреть места вызовов конктруктора и деструктора симулятора, но скорее всего, он доступен даже когда актор в оффлайне.

function has_alife_info(info_id)
	return info_id ~= "" and alife():has_info(0, info_id)
end
 

info_id ~= "" - если подобное вызвали - у нас где-то проблемы

Неявно может быть и пустая строка. Такое вполне вероятно, по крайней мере намного вероятнее, чем вызов из главного меню до загрузки игры :D Изменено пользователем RayTwitty

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


Ссылка на сообщение
(изменено)

Так как непонятно, к кому обращается @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 правильно сделано сравнение строк, то никаких внутренних затрат на сравнения не потребуется, функция почти сразу выйдет с результатом. Изменено пользователем RayTwitty

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


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

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

AMK-Team.ru

×
×
  • Создать...