SA-MP Forums Archive
Оптимизация кода - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Оптимизация кода (/showthread.php?tid=153915)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13


Re: Оптимизация кода - Romz - 01.02.2014

Quote:
Originally Posted by Urukhay
Посмотреть сообщение
Какой вариант предпочтительней по вашему мнению?
1.
pawn Код:
new skin = GetPlayerSkin(playerid);
if(skin == 69) return 1;
if(skin+3 == 66) return 1;
SetPlayerSkin(playerid,skin+6);
return 1;
2.
pawn Код:
if(GetPlayerSkin(playerid) == 69) return 1;
if(GetPlayerSkin(playerid)+3 == 66) return 1;
SetPlayerSkin(playerid,GetPlayerSkin(playerid)+6);
return 1;
В скорости работе разницы думаю не будет. А так в первом варианте ты записываешь ид скина, а потом проверяешь и изменяешь его. Во втором варианте постоянно узнаешь ид скина.


Re: Оптимизация кода - -Stranger- - 01.02.2014

Urukhay, это не тот момент где стоит думать об оптимизации...
В первом варианте мы занимаем лишние 4 байта, но чуть чуть быстрее выполняем код.
Во втором мы чуть медленнее выполняем код, зато не занимаем лишние 4 байта.

Но чисто логически первый будет правильнее, по нескольким причинам, и основная это то, что чисто теоретически в момент проверки этого когда, скин может измениться, и дальнейшее выполнение кода может потерять смысл.


Re: Оптимизация кода - Diman777 - 01.02.2014

Как вариант)
pawn Код:
test_skin(playerid)
{
    new skin = GetPlayerSkin(playerid);
    if(skin != 69 || skin+3 != 66) SetPlayerSkin(playerid, skin+6);
    return 1;
}



Re: Оптимизация кода - Stepashka - 01.02.2014

А написать skin != 63 мама или религия не позволяет?


Re: Оптимизация кода - Urukhay - 01.02.2014

Я вообще спрашивал не про то, как проверить. А про то, как лучше получить скин, сразу и потом использовать переменную. Или получать несколько раз в функции.


Re: Оптимизация кода - Eims - 01.02.2014

Quote:
Originally Posted by Urukhay
Посмотреть сообщение
Я вообще спрашивал не про то, как проверить. А про то, как лучше получить скин, сразу и потом использовать переменную. Или получать несколько раз в функции.
Есть стакан и есть ведро с водой, которое находится в 10 метрах от вас. Что легче: Один раз сходить и напиться или делать по маленькому глотку, но бегать каждую минуту до него?


Re: Оптимизация кода - stabker - 01.02.2014

pawn Код:
Test1()
{
    new v = GetPlayerSkin(0);
    if(v == 100) {}
    else if(v == 101) {}
}

Test2()
{
    if(GetPlayerSkin(0) == 100) {}
    else if(GetPlayerSkin(0) == 101) {}
}

main()
{
    new tick = GetTickCount();
    for(new i; i < 1000000; i++) {}
    new ltime = GetTickCount() - tick;
   
    tick = GetTickCount();
    for(new i; i < 1000000; i++) Test1();
    printf("Вариант с переменной: %d ms", GetTickCount() - tick - ltime);
   
    tick = GetTickCount();
    for(new i; i < 1000000; i++) Test2();
    printf("Вариант без переменной: %d ms", GetTickCount() - tick - ltime);
}
Имхо, стоит учитывать сложность самой функции. В разных ситуациях выигрыш будет разный.


Re: Оптимизация кода - Kuroki - 22.03.2014

Quote:
Originally Posted by Jon_De
View Post
у вас мод на файлах, о какой оптимизации речь?
как бы файловую систему никто не отменял


Re: Оптимизация кода - Eims - 22.03.2014

И вы считаете, что во всём виноват цикл? Уверены, что данные портятся именно при записи, а не где-то ранее?


Re: Оптимизация кода - Kuroki - 22.03.2014

Quote:
Originally Posted by Eims
View Post
И вы считаете, что во всём виноват цикл? Уверены, что данные портятся именно при записи, а не где-то ранее?
Еще есть сохранение домов, но там я уверен что все нормально


Re: Оптимизация кода - OKStyle - 22.03.2014

pawn Code:
for(new h = 0; h < sizeof(HouseInfo); h++)
{
    pickups ++;
    HouseInfo[h][hLabel] = Create3DTextLabel(text, 0xFFFFFFFF, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez] + 1, 20.0, 0, 1);
    if(HouseInfo[h][hOwned] == 0)
    {
        format(text,sizeof(text),"{FFA500}Номер дома: {FFFFFF}[{FF0000}%d{FFFFFF}]\n{FFA500}Цена дома: {FFFFFF}[{FF0000}%d{FFFFFF}]\n{FFA500}Класс: {FFFFFF}[%s{FFFFFF}] \n{FFA500}Купить: {FFFFFF}[{FF0000}/buyhouse{FFFFFF}]",h,HouseInfo[h][hValue],classhouse);
        HouseInfo[h][hMIcon] = CreateDynamicMapIcon(HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez], 31, COLOR_WHITE, 0, -1, -1, 400.0);
        HouseInfo[h][hPickup] = CreatePickup(1273, 23, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez], -1);
        continue;
    }
    format(text,sizeof(text),"{FFA500}Номер дома: {FFFFFF}[{FF0000}%d{FFFFFF}]\n{FFA500}Владелец дома: {FFFFFF}[{FF0000}%s{FFFFFF}] {FFFFFF}[%s{FFFFFF}]\n {FFA500}Класс: {FFFFFF}[{FF0000}%s{FFFFFF}]\n {FFFFFF}[%s{FFFFFF}]", h, HouseInfo[h][hOwner], ttextt, classhouse, lock22);
    HouseInfo[h][hMIcon] = CreateDynamicMapIcon(HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez], 32, COLOR_WHITE, 0, -1, -1, 400.0);
    HouseInfo[h][hPickup] = CreatePickup(1272, 23, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez], -1);
}
На первый взгляд.


Re: Оптимизация кода - Jon_De - 22.03.2014

Сначала создать 3 д текст, а потом форматировать строку?


Re: Оптимизация кода - Diman777 - 22.03.2014

аххаха, подумаешь не доглядел)


Re: Оптимизация кода - Kuroki - 22.03.2014

Помогите исправить паблик сохранение домов, иногда все дома ставятся в одни координаты после сохранения
И я решил сделать вот такую проверку и когда цикл задействован то файлик property.cgf скачет т.е прыгает его размер например был 122кб стал 20, через 5 сек 50 и т.д пока не остановится цикл.
И наверное при сохранение домов он меняет кб и идет слет координат
Помогите решить трабл такой
PHP Code:
for(new i=0;i<MAX_PLAYERS;i++)
{
savehouses();

PHP Code:
stock savehouses()
{
    new 
Filefile2;
    new 
idx;
    
    while (
idx sizeof(HouseInfo))
    {
        new 
coordsstring[256];
        
format(coordsstringsizeof(coordsstring), "%f,%f,%f,%f,%f,%f,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%f,%f,%d,%d,%d\n",
        
HouseInfo[idx][hEntrancex],
        
HouseInfo[idx][hEntrancey],
        
HouseInfo[idx][hEntrancez],
        
HouseInfo[idx][hExitx],
        
HouseInfo[idx][hExity],
        
HouseInfo[idx][hExitz],
        
HouseInfo[idx][hOwner],
        
HouseInfo[idx][hValue],
        
HouseInfo[idx][hHel],
        
HouseInfo[idx][hInt],
        
HouseInfo[idx][hLock],
        
HouseInfo[idx][hOwned],
        
HouseInfo[idx][hTakings],
        
HouseInfo[idx][hVec],
        
HouseInfo[idx][hVcol1],
        
HouseInfo[idx][hVcol2],
        
HouseInfo[idx][hKlass],
        
HouseInfo[idx][hVehSost],
        
HouseInfo[idx][hCarx],
        
HouseInfo[idx][hCary],
        
HouseInfo[idx][hCarz],
        
HouseInfo[idx][hCarc]);
        if(
idx == 0)
        {
            
file2 fopen("property.cfg"io_write);
        }
        else
        {
            
file2 fopen("property.cfg"io_append);
        }
        
fwrite(file2coordsstring);
        
idx++;
        
fclose(file2);
    }




Re: Оптимизация кода - stabker - 22.03.2014

Quote:
Originally Posted by Kuroki
View Post
PHP Code:
for(new i=0;i<MAX_PLAYERS;i++)
{
savehouses();

Что по-вашему делает этот код?


Re: Оптимизация кода - Kuroki - 22.03.2014

Quote:
Originally Posted by stabker
View Post
Что по-вашему делает этот код?
выполняет 500тактов выхова паблика


Re: Оптимизация кода - stabker - 22.03.2014

Quote:
Originally Posted by Kuroki
View Post
выполняет 500тактов выхова паблика
Верно, тогда зачем вы 500 раз подряд сохраняете дома?


Re: Оптимизация кода - Kuroki - 22.03.2014

Quote:
Originally Posted by stabker
View Post
Верно, тогда зачем вы 500 раз подряд сохраняете дома?
я же говорю что проверял как сохраняются дома, получается при таком цикле файл меняет размер свой


Re: Оптимизация кода - stabker - 22.03.2014

Quote:
Originally Posted by Kuroki
View Post
я же говорю что проверял как сохраняются дома, получается при таком цикле файл меняет размер свой
А, извиняюсь, неправильно понял. Он меняет размер, т.к. много раз перезаписывается, в итоге примерно такой же получится.

Проблемы с сохранением наблюдаются когда выключаете и включаете сервер? Если да, то как именно вы его выключаете?


Re: Оптимизация кода - OKStyle - 22.03.2014

Quote:
Originally Posted by Jon_De
View Post
Сначала создать 3 д текст, а потом форматировать строку?
Косяк ) Даже не заметил. Тогда придётся либо в каждом условии ставить создание, либо убирать continue и добавлять else.