Гайд Оптимизируем Стринги

Тема в разделе "PAWN", создана пользователем Batka1337, 1 май 2015.

Статус темы:
Закрыта.
  1. Batka1337

    Batka1337 Пользователь

    Регистрация:
    01.11.2014
    Сообщения:
    22
    Симпатии:
    9
    Репутация:
    4
    Всем привет
    Сегодня я вам расскажу как оптимизировать стринги, это намного проще чем кажется
    Возьмём к примеру какой нибудь неоптимизированный стринг и опробуем его оптимизировать
    new string[250];
    format(string,sizeof(string),"[R] %s[%d] взял %i патронов со склада. На складе: %i",playername,playerid,pt,SkladArmy);
    SendFractionMessage(PlayerInfo[playerid][pMember],COLOR_LIGHTRED,string);

    Думаю тут всё понятно, текст в рацию при взятии патроновПробуем оптимизировать​
    static const fmt_string[] = "[R] %s[%d] взял %i патронов со склада. На складе: %i";
    new string[sizeof(fmt_string)+MAX_PLAYER_NAME+4+3+10-2-2-2-2];
    format(string,sizeof(string), fmt_string,playername,playerid,pt,SkladArmy);
    SendFractionMessage(PlayerInfo[playerid][pMember],COLOR_LIGHTRED,string); 


    Вот я оптимизировал, теперь объясню какая строчка что делает
    В первой строчке мы создаём переменную равную кол-ву символов в тексте(без переменных)
    Во второй строчке мы создаём новую переменную, сам стринг
    В ней мы складываем то что считали в первой строке и кол-во символов которые задаются в переменных и отнимаем символы для переменных то есть "%s", "%i" и т.д.
    Разберём:
     
  2. MISTER_GONWIK

    Регистрация:
    09.03.2013
    Сообщения:
    1.030
    Симпатии:
    1.091
    Репутация:
    656
    Бред
     
    Zoxan_Twist и kaZax нравится это.
  3. Darge

    Darge Пользователь

    Регистрация:
    02.05.2015
    Сообщения:
    7
    Симпатии:
    0
    Репутация:
    0
    Согласен с постомвыше.

    Плохой пример:
    new string[250];
    format(string,sizeof(string),"[R] %s[%d] взял %i патронов со склада. На складе: %i",playername,playerid,pt,SkladArmy);
    SendFractionMessage(PlayerInfo[playerid][pMember],COLOR_LIGHTRED,string);
    Хороший пример:
    new string[86+MAX_PLAYER_NAME+4+4+1];
    А остальной код вообще лишний. По сути тут у тебя ничего не сказано, а ведь важно, чтобы бы +1 на обнуление(\0)!

     
  4. 0pc0d3R

    0pc0d3R Заблокирован

    Регистрация:
    27.12.2014
    Сообщения:
    551
    Симпатии:
    273
    Репутация:
    119
    Лучше уж тогда strpack использовать.
     
  5. Morj

    Morj Активный пользователь

    Регистрация:
    19.01.2015
    Сообщения:
    44
    Симпатии:
    2
    Репутация:
    0
    А не проще создать одну глобальную строку для каждого игрока?

    Пример:

    new stringer[128][MAX_PLAYERS];//Переменная для каждого игрока
    
    //Использование
    format(stringer[playerid], 5, "text");
    SendClientMessage(playerid, stringer[playerid]);
     
  6. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.510
    Симпатии:
    761
    Репутация:
    208
    То чуство кода павн не может std::string
     
    #6 Dark_Knight, 5 апр 2016
    Последнее редактирование: 5 апр 2016
  7. Untonyst

    Untonyst Новичок

    Регистрация:
    12.03.2016
    Сообщения:
    2
    Симпатии:
    1
    Репутация:
    0
    И в чем "оптимизация"? Стэка сэкономите? >_<
     
Статус темы:
Закрыта.