Что меньше влияет на память?
Вопрос, что лучше использовать реальные переменные или обычные цифры с вычислением, переменные юнитов или обычные функции? Что будет меньше вызывать нагрузку на память, вопрос бредовый но все же:)
call UnitDamageTarget(a,n,2*GetUnitAbilityLevel(a,'A00V'),false,false,null,null,null)
// или
local real damage = 2*GetUnitAbilityLevel(a,'A00V')
call UnitDamageTarget(a,n,damage,false,false,null,null,null)
//-------------------------------------------------------------------------------------------
call KillUnit(GetSpellAbilityUnit())
// или
local unit a = GetSpellAbilityUnit()
call KillUnit(a)
set a = null
Я думаю что вызыв и создание переменных нагружает больше чем уже встроенные функции, но всеравно интересно

Лучший ответ:
бранчера в виртуалке жасса нет, а количество внутренних проверок рабочих объектов на каждом этапе так велико, что надеяться на "прогрев" нативок бессмысленно. Если используется больше одного раза - вбивай в локалку, если один раз - оставляй вызовом функции.


Views: 91

rsfghd #1 - 6 days ago 2
Голосов: +2 / -0
Логично же, что первый вариант будет быстрее, т.к. при втором варианте у тебя происходит объявление переменной, запись в неё значения, а потом уже в функции идёт обращение к этой переменной и оттуда достаётся значение

Такая штука была бы быстрее, если бы ты юзал эти переменные не для одного действия, а нескольких, например вместо
call SetUnitX(GetTriggerUnit(), x)
call SetUnitY(GetTriggerUnit(), y)
call KillUnit(GetTriggerUnit())
лучше будет естественно так
local unit u = GetTriggerUnit()
call SetUnitX(u, x)
call SetUnitY(u, y)
call KillUnit(u)
set u = null
обращение к переменной быстрее вызова функции, но если ты создаёшь ради одного действия, то это не имеет смысла
Гуванч #2 - 6 days ago (изм. ) 0
Голосов: +0 / -0
rsfghd:
call SetUnitX(GetTriggerUnit(), x)
call SetUnitY(GetTriggerUnit(), y)
call KillUnit(GetTriggerUnit())
иногда бывало что если не использовать переменную то триггер нефига не работал(на ГУИ) лучше все же использовать переменную а да с переменныме точно так же было не хаватала скорости не помню что я делал но точно знаю что переменные могут тормозить

как сказал <- xgm.guru/user/rsfghd если код короткий то можно без переменных(не всегда) а если длинный то без переменных никак
rsfghd #3 - 6 days ago 0
Голосов: +0 / -0
Гуванч, есть тест бенчмарк на мх, если уж хочется узнать какие действия будут быстрее других
Гуванч #4 - 6 days ago 0
Голосов: +0 / -0
rsfghd:
Гуванч, есть тест бенчмарк на мх, если уж хочется узнать какие действия будут быстрее других
да не чел меня все устраивает просто прочитав твой коммент вспомнил что баги были у меня без переменных и с переменными
JackFastGame #5 - 5 days ago 0
Голосов: +0 / -0
Разница настолько мала, что лучше вообще так не делать.
Не убивайте читабельность в угоду мнимой производительности. Оптимизация и архитектура проекта эффективны по Парето, поэтому ищите золотую середину.
Hate #6 - 5 days ago 2
Голосов: +2 / -0
имеет смысл инлайнить если там меньше чем пару вызовов, если больше - забивать в переменные лучше

потому что вызов нативок тоже не бесплатный, и постоянно дергать оттуда данные если там их вызовов 10 не комильфо
quq_CCCP #7 - 5 days ago 0
Голосов: +0 / -0
Hate, мало того вызов нативок некоторых достаточно медленный бывает, ладно проверка уровня абилки не такая сдоупочная...
ScorpioT1000 #8 - 5 days ago 0
Голосов: +0 / -0
Вы не учли, что бранч предиктор это может порешать) хотя что ждать от жасса.
DracoL1ch #9 - 4 days ago (изм. ) 2
Голосов: +2 / -0

бранчера в виртуалке жасса нет, а количество внутренних проверок рабочих объектов на каждом этапе так велико, что надеяться на "прогрев" нативок бессмысленно. Если используется больше одного раза - вбивай в локалку, если один раз - оставляй вызовом функции.
ScorpioT1000 #10 - 3 days ago (изм. ) 2
Голосов: +2 / -0
DracoL1ch, бранч предикшн не в виртуалках, а в железе и работает с любыми вычислениями, советую изучить тему и потестировать, довольно полезно для саморазвития 👍
DracoL1ch #11 - 3 days ago (изм. ) 0
Голосов: +0 / -0
я понял, о чем ты, я говорю, что жасс не подгадаешь - в кишках простейших действий тысячи прыжков и обращений к самым разным областям памяти, т.к. байт-код исполняется еще и в "виртуалке". нет смысла играть в компилятор, достаточно делать те оптимизации, которые не противоречат общей логике.