Цитата(RayTwitty @ 09.09.2019, 21:41)
Хотя, мне кажется, если замерить скорости, то особого выигрыша не будет. Просто "синтаксический сахар", меньше коду.
А, не, беру свои слова назад... Меня торкнуло и я померял.
с++ в движке
Код
void iterate_alife_objects(const CALifeSimulator *pself,const luabind::functor<void> &functor)
{
if (!functor.is_valid())
{
Msg("! ERROR functor not valid for iterate_alife_objects!");
return;
}
const CALifeObjectRegistry::OBJECT_REGISTRY* object_registry = &(pself->objects().objects());
for (const auto& object_pair : *object_registry)
functor(object_pair.second);
}
экспорт
class_<CALifeSimulator>("alife_simulator")
.def("iterate_alife_objects",&iterate_alife_objects)
Луа в скриптах
Код
local cnt1=0
local tmr = profile_timer()
tmr:start()
for a=0,100 do
for i=0,65534 do
if alife():object(i) then
cnt1=cnt1+1
end
end
end
tmr:stop()
local tmr2 = profile_timer()
tmr2:start()
local cnt2=0
for a=0,100 do
alife():iterate_alife_objects(function(obj)
cnt2=cnt2+1
end)
end
tmr2:stop()
log(" test 1 count[%d] time[%d]",cnt1,tmr:time())
log(" test 2 count[%d] time[%d]",cnt2,tmr2:time())
т.е. мы делаем по 100 итераций обращения туда и туда... почему 100? ну например приперло на апдейте какого нибудь биндера кому то это делать...
Результат - время в микросекундах:
[11.09.19 12:12:52.069] test 1 count[3729223] time[17154788]
[11.09.19 12:12:52.069] test 2 count[3729223] time[3562466]
При единичной итерации
[11.09.19 12:19:10.499] test 1 count[36923] time[156888]
[11.09.19 12:19:10.499] test 2 count[36923] time[33034]
т.е. примерно в 5-ть раз быстрее... как по мне - стоит заморочиться
p.s. желающие померять level.object_by_id - оставляю Вам для факультатива...