PDA

Просмотр полной версии : [Вопрос] Совет по оптимизации



m1n1vv
11.08.2017, 22:49
Какой из вариантов надежней? Скорость таймера: 50 мс. Работа непостоянная.


switch (glog__save[playerid])
{
case 0..25:
{
ExperienceBuff[playerid] = (!glog__index{playerid}) ? (++ExperienceBuff[playerid]) : (--ExperienceBuff[playerid]);
--glog__save[playerid];
}
case 26..110:
{
ExperienceBuff[playerid] = (!glog__index{playerid}) ? (ExperienceBuff[playerid]+10) : (ExperienceBuff[playerid]-10);
glog__save[playerid] -= 10;
}
default:
{
ExperienceBuff[playerid] = (!glog__index{playerid}) ? (ExperienceBuff[playerid]+100) : (ExperienceBuff[playerid]-100);
glog__save[playerid] -= 100;
}
}


new
xp = ExperienceBuff[playerid],
index = glog__index{playerid},
save = glog__save[playerid];

switch (save)
{
case 0..25:
{
xp = (!index) ? (++xp) : (--xp);
--save;
}
case 26..110:
{
xp = (!index) ? (xp+10) : (xp-10);
save -= 10;
}
default:
{
xp = (!index) ? (xp+100) : (xp-100);
save -= 100;
}
}

ExperienceBuff[playerid] = xp,
glog__index{playerid} = index,
glog__save[playerid] = save;

VVWVV
11.08.2017, 22:57
Второй вариант генерирует достаточно быстрый код, но в таймере он будет немного не к месту, ибо происходит возврат и выделение памяти из стека для переменных, поэтому лучше заменить ключевое слово new на static.

m1n1vv
11.08.2017, 23:00
Второй вариант генерирует достаточно быстрый код, но в таймере он будет немного не к месту, ибо происходит возврат и выделение памяти из стека для переменных, поэтому лучше заменить ключевое слово new на static.

Жаль локальным статикам нельзя приравнивать к значению

VVWVV
11.08.2017, 23:03
Жаль локальным статикам нельзя приравнивать к значению

Лол, что? Вот же:


static xp, index, save;
xp = ExperienceBuff[playerid],
index = glog__index{playerid},
save = glog__save[playerid];

switch (save)
{
case 0..25:
{
xp = (!index) ? (++xp) : (--xp);
--save;
}
case 26..110:
{
xp = (!index) ? (xp+10) : (xp-10);
save -= 10;
}
default:
{
xp = (!index) ? (xp+100) : (xp-100);
save -= 100;
}
}

ExperienceBuff[playerid] = xp,
glog__index{playerid} = index,
glog__save[playerid] = save;


Генерация кода будет почти такой же, как и при локальных стековых переменных, но кроме выделения места в стеке.

m1n1vv
11.08.2017, 23:07
Лол, что? Вот же:

Забыл дописать при объявлении. Спасибо.

ziggi
11.08.2017, 23:11
static tmp;

switch (glog__save[playerid])
{
case 0..25:
{
tmp = 1;
}
case 26..110:
{
tmp = 10;
}
default:
{
tmp = 100;
}
}

ExperienceBuff[playerid] += (!glog__index{playerid}) ? (tmp) : (-tmp);
glog__save[playerid] -= tmp;