Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для Oxidon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.01.2017
    Сообщений
    5
    Репутация:
    0 ±

    Массивы, оптимизация. А правильно ли?

    Всем привет. Ребята, павнеры, подскажите пожалуйста, есть ли способ как-то улучшить эту часть кода?
    Она собсно отвечает за показ диалога /mm игроку.



    UPD: Просто я боюсь что когда я добавлю туда остальные переменные, номер телефона и прочее, в сумме 22 штуки, то когда её будет вызывать куча игроков это не очень хорошо отразится на быстродействии сервера.

    Вот результат выполнения команды:


    И код:
      Открыть/закрыть
    PHP код:
    stock ShowPlayerInfo(playerid) {
        new 
    time GetTickCount();
        new 
    columnsstr[128], string[512], params[MAX_PLAYER_NAME];
        new 
    PlayerInfo[3][24] = {
            
    "%d",
            
    "%s"
            
    "%d"
        
    };

        
    format(PlayerInfo[0], sizeof (PlayerInfo), PlayerInfo[0], Player[playerid][pID]);
        
    format(PlayerInfo[1], sizeof (PlayerInfo) + (-MAX_PLAYER_NAME), PlayerInfo[1], Player[playerid][pName]);
        
    format(PlayerInfo[2], sizeof (PlayerInfo), PlayerInfo[2], Player[playerid][pLevel]);

        for(new 
    03i++) {
            
    format(strsizeof str""orange"%s: "MenuPlayerInfo[i]);
            
    format(paramssizeof params"%s\n"PlayerInfo[i]);
            
    strcat(strparams);
            
    strcat(stringstr);
        }

        
    printf("Операция потребовала: %d секунд"GetTickCount() - time);

        return 
    ShowPlayerDialog(playeridDIALOG_ID_MENU_PLAYERDIALOG_STYLE_MSGBOX"Мой персонаж"string"Закрыть""");

    Последний раз редактировалось Oxidon; 13.01.2017 в 17:50.

  2. #2
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Ну можно так:
    PHP код:
    stock ShowPlayerInfo(playerid)
    {
        new 
    time GetTickCount();
        new 
    string[128];
        
    format(stringsizeof(string), orange"id: %d\nname: %s\nlevel: %d"Player[playerid][pID], Player[playerid][pName], Player[playerid][pLevel]);
        return 
    ShowPlayerDialog(playeridDIALOG_ID_MENU_PLAYERDIALOG_STYLE_MSGBOX"Мой персонаж"string"Закрыть""");

    Я так понял MenuPlayerInfo это массив с названием поля?

  3. Пользователь сказал cпасибо:
    Oxidon (13.01.2017)
  4. #3
    Аватар для Oxidon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.01.2017
    Сообщений
    5
    Репутация:
    0 ±
    Именно.
      Открыть/закрыть
    PHP код:
    new MenuPlayerInfo[3][0] = {
        
    "Номер аккаунта",
        
    "Имя",
        
    "Уровень"
    }; 


    - - - Добавлено - - -

    А есть ли способ избежать этих тысячи строковых format'ов? Или этот способ будем самым быстрым?

  5. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Очень странная и RLSо-подобная функция, сжирающая много памяти как в стеке, так и в сегменте данных.

    1. Используйте один массив вместо аж трёх массивов. Кроме того, используйте подсчёт строки.
    2. Используйте упакованные строки.
    3. Не используйте магические числа. Они делают ваш код более запутанным. Впрочем, если вы хотите так делать - пишите комментарии.

    Вот дополнительная информация:
    1. Оператор char
    2. Подсчёт размера форматируемой строки
    3. Упакованные строки
    4. Мифы о Pawn-скриптинге
    5. Основные рекомендации по написанию кода

  6. Пользователь сказал cпасибо:
    Oxidon (13.01.2017)
  7. #5
    Аватар для Oxidon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.01.2017
    Сообщений
    5
    Репутация:
    0 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Очень странная и RLSо-подобная функция, сжирающая много памяти как в стеке, так и в сегменте данных.

    1. Используйте один массив вместо аж трёх массивов. Кроме того, используйте подсчёт строки.
    2. Используйте упакованные строки.
    3. Не используйте магические числа. Они делают ваш код более запутанным. Впрочем, если вы хотите так делать - пишите комментарии.

    Вот дополнительная информация:
    1. Оператор char
    2. Подсчёт размера форматируемой строки
    3. Упакованные строки
    4. Мифы о Pawn-скриптинге
    5. Основные рекомендации по написанию кода
    По первому пункту, пожалуйста поподробней, если можно. Либо отправьте курить мануалы по массивам, а то я немного не втыкаю.
    Я пишу на pawno три дня всего, ошибки-ошибки-ошибки.
    По поводу магических чисел, согласен, исправлю это.

  8. #6
    Аватар для qwezert
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.06.2016
    Адрес
    Одесса, Украина
    Сообщений
    281
    Репутация:
    51 ±
    Я сначало ничего не понял и потом тоже ничего не понял.

    - - - Добавлено - - -

    Какое быстродействие? Добавь туда хоть 200 переменных, если ты не будешь запускать по 20 форматов и по 10 массивов для каждого символа - никаких лагов не может быть впринципе. Эти переменные и так хранятся все впамяти, ты просто функцией их отрусуешь на экран.
    PHP код:
    format(string,sizeof(string),"lvl: %d\n phone:%d \n ........... ",lvl,phone); 
    Главное строки упакуй :)
    Лучше лишний раз показаться глупым и что то узнать, чем вы*бнуться и обосраться.

  9. Пользователь сказал cпасибо:
    Oxidon (13.01.2017)
  10. #7
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Если очень хочется, то форматированную строку можно закешировать.

  11. Пользователь сказал cпасибо:
    Oxidon (13.01.2017)
  12. #8
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от qwezert Посмотреть сообщение
    Главное строки упакуй :)
    Сжатие строк также никак на скорости выполнения не отразится
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  13. Пользователь сказал cпасибо:
    Oxidon (13.01.2017)
  14. #9
    Аватар для Oxidon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.01.2017
    Сообщений
    5
    Репутация:
    0 ±
    Спасибо всем за ответы, буду исправлять.

  15. #10
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    А кто то сказал, что увеличится скорость?

    Под оптимизацией не всегда понимается - скорость выполнения кода. Это может быть и оптимизация памяти.
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Сжатие строк также никак на скорости выполнения не отразится
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  16. Пользователь сказал cпасибо:
    Oxidon (13.01.2017)
 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •