Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 21 по 30 из 34
  1. #21
    Аватар для Alexey Melnik
    Новичок

    Статус
    Оффлайн
    Регистрация
    11.11.2017
    Сообщений
    9
    Репутация:
    0 ±
    Это раздел "Уроки", чому б и не поизобретать-то?

  2. #22
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Alexey Melnik Посмотреть сообщение
    Это раздел "Уроки", чому б и не поизобретать-то?
    Никто и не запрещает. Это было сказано, скорее, для новичков, которые увидят, что ты говоришь про то, что аж 1,5 кибибайта сэкономлено и побегут быстрее твою версию ставить, не понимая, что толку от этого крайне мало.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #23
    Аватар для Alexey Melnik
    Новичок

    Статус
    Оффлайн
    Регистрация
    11.11.2017
    Сообщений
    9
    Репутация:
    0 ±
    Ну, это больше сарказм был, чем какое-то достоинство. Вообще новичкам рекомендую выпилить эти проверки, потому что тогда их во всех циклах придется ставить или макрос писать.

  4. #24
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Новичкам стоит советовать foreach, который позволяет создавать свои итераторы без лишних заморочек (просто используя конкретные функции). Будет гораздо больше профита, если вы, например, сделаете отдельный итератор для авторизированных игроков и отдельный итератор для админов, а не будете пихать проверки в итератор всех игроков. Вы потратите чуть больше памяти, но выиграете в скорости.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    Daniel_Cortez (11.11.2017)
  6. #25
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Новичкам стоит советовать foreach, который позволяет создавать свои итераторы без лишних заморочек (просто используя конкретные функции). Будет гораздо больше профита, если вы, например, сделаете отдельный итератор для авторизированных игроков и отдельный итератор для админов, а не будете пихать проверки в итератор всех игроков. Вы потратите чуть больше памяти, но выиграете в скорости.
    лол, давно так использовал, но из-за незнания что так можно сделать с инклуидом foreach использовал метод
    tracker1, потом узнал об этом способе ( когда уже начал что-то понимать )

    получалось, что-то типо этого:
    PHP код:
    const max_online_admin 50+1// всегда +1 ячейка

    new bust_admin[max_online_admin] = {-1,...};
    new 
    bust_admins;
    #define aforeach(%0) for(new _i, %0=bust_admin[_i]; _i <bust_admins; %0=bust_admin[++_i])

    stock Invites_Admin(playerid)
    {
        if(
    Admin_Level{playerid} == 0) return 1;
        if(
    bust_admins max_online_admin-1) return 1;
        
    bust_admin[bust_admins++] = playerid;
        for(new 
    i;i<sizeof(CheatShow);i++){
            
    TextDrawShowForPlayer(playeridCheatShow[i]);
        }
        if(
    Admin_Level{playerid} < 7)
        {
            static 
    login_adm[] = "<Alogin> %s[%d] авторизировался как модератор %i уровня";
            new 
    str[sizeof(login_adm)+(-2+MAX_PLAYER_NAME)+2];
            
    format(str,sizeof(str),login_adm,PI[playerid][pName],playerid,Admin_Level{playerid});
            
    SendAdmin(0xFFCC00FF,str);
        }
        else 
    SendClientMessage(playerid,0xFFCC00FF,!"Вы успешно авторизовались как спец. администратор");
        return 
    1;
    }
    stock Leave_Admin(playerid,reas 0)
    {
        if(
    Admin_Level{playerid} == 0) return 1;
        if(
    Admin_Level{playerid} < 7)
        {
            new 
    str_leave_adm[10+MAX_PLAYER_NAME char];
            
    strcat(str_leave_adm,!"<Alogin> ");
            
    strcat(str_leave_adm,PI[playerid][pName]);
            if(
    reas == 1strcat(str_leave_adm,!" disconnect");
            else 
    strcat(str_leave_adm,!" unlogged");
            
    SendAdmin(0xFFCC00FF,str_leave_adm);
        }
        else 
    SendClientMessage(playerid,0xFFCC00FF,!"Вы вышли из под администрирования");
        
    Admin_Level{playerid} = 0;
        for(new 
    i;i<sizeof(CheatShow);i++){
            
    TextDrawHideForPlayer(playeridCheatShow[i]);
        }
        for(new 
    i=0;i<bust_admins;i++)
        {
            if(
    bust_admin[i] == playerid)
            {
                
    bust_admin[i] = bust_admin[--bust_admins];
                
    bust_admin[bust_admins]=-1;
                break;
            }
        }
        return 
    1;


  7. #26
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну вот а foreach хранит в себе всё то же самое, только в удобной обёртке, из-за чего и теряет пару лишних миллисекунд. Но если из-за них отказываться от foreach, то можете смело вообще от циклов отказываться, расписывая все итерации вручную, дабы сэкономить то время, что тратится на работу цикла (а это инициализация переменной + условие + действия с ней).
    В Китае вас очень будут чтить за это
    Последний раз редактировалось DeimoS; 14.11.2017 в 01:19.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. 2 пользователя(ей) сказали cпасибо:
    Blood (14.11.2017) Daniel_Cortez (14.11.2017)
  9. #27
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Обновил код и результаты теста скорости в уроке, удалил из теста плагин Vectorial (почему-то не получилось найти его на оффе; впрочем, он всё равно заранее был в безвыигрышном положении из-за оверхеда на вызов нативных функций).


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну вот а foreach хранит в себе всё то же самое, только в удобной обёртке, из-за чего и теряет пару лишних миллисекунд.
    На самом деле там нет и одной тысячной миллисекунды разницы.
    Код:
    Tracker1's foreach test
    125 players connected
    50-74 IDs Disconnected
    Starting main cycle 10_000_000 times
    Tracker1's foreach test DONE. Time: 2472 ms.
    
    
    Y_Less's foreach test
    125 players connected
    50-74 IDs Disconnected
    Starting main cycle 10_000_000 times
    Y_Less's foreach test DONE. Time: 2723 ms.
    (2723 - 2472) / 10000000 = 0,0000251 (мс)
    И это только с JIT. Без JIT поделие Tracker1 работает почти в 2 раза медленнее foreach (см. 1-й пост).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. #28
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Обновил код и результаты теста скорости в уроке, удалил из теста плагин Vectorial (почему-то не получилось найти его на оффе; впрочем, он всё равно заранее был в безвыигрышном положении из-за оверхеда на вызов нативных функций).



    На самом деле там нет и одной тысячной миллисекунды разницы.

    (2723 - 2472) / 10000000 = 0,0000251 (мс)
    И это только с JIT. Без JIT поделие Tracker1 работает почти в 2 раза медленнее foreach (см. 1-й пост).
    Я говорил лишь для примера. Такие тесты уже проводили. Просто не помню где.
    Да и не важно, была бы там разница в паре миллисекунд или в секунде, ибо инклуд даёт удобную оболочку, которая позволяет делать код проще и компактнее, что уменьшает риск допущения ошибки. Глупо пытаться выиграть в скорости там, где это не требуется. Особенно в ущерб простоты кода.

    Вообще я бы советовал всем "аптимизаторам-3000" прочесть два этих поста с офф форума
      Открыть/закрыть
    Оригинал

    Цитата Сообщение от dimonml
    Цитата Сообщение от Kernell
    Дефайны влияют на вес?
    Инклюды и дефайны - это всего лишь препроцессор языка. Они меняют исходный код до того, как он попадет компилятору. У компилятора павн есть ключик, если с которым скомпилировать файл, то получим результат работы препроцессора - будет просто один файл, в который вставлены все инклюды и все дефайны заменены на свои значения.

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

    На хостинге есть ресурсы - процессор и память. Можно оптимизовать как по одному параметру, так и по другому. Но оптимизировать сразу оба как правило очень сложно (если возможно). Вот ты смущаешься размеру amx, а тебе это мешает? Это проблема? Стоит вообще смотреть в эту сторону?

    Тут и в англоязычном разделе многие предлагают использовать битовые поля и прочие методики сокращения использования памяти. Да, безусловно, памяти от этого используется меньше. А на сколько возрастает использование процессора? Кто ни будь задавался таким вопросом и пытался замерить? Например, архитектура х86 очень старая и у процессора есть оп-коды, которые позволяют прочитать из памяти любой байт (по любому адресу). В более новых архитектурах, например в Itanium, такой возможности нет и из памяти можно прочитать только машинное слово (по скольку архитектура 64 разрядная, то 8 байт) и только по адресу кратному величине этого машинного слова. С одной стороны непонятно, за чем такое ограничение, но если приглядеться, то станет видно, что даже x86 процессоры, если у них просят прочитать байт из памяти по адресу, не кратному машинному слову (4ым или 8и байтам), то делает это намного медленней чем если адрес кратен. И по этой причине современные компиляторы во время оптимизации стараются выравнивать элементы структур по величине машинного слова. По этой причине в С++ sizeof(bool) == 4. Мы тратим на хранение 1 бита информации 4 байта, но мы с этим битом работаем быстро.

    Все кричат, что нужно использовать строки по 128 слов, вместо 256, но в англоязычном разделе показали, что скорость возрастает не более чем на 5%. Стоит ли такое оптимизировать, учитывая что во многих случаях это усложнит код?

    К чему я это все написал. Прежде чем что либо оптимизировать хорошо бы подумать, для чего это делается и что вы будете ухудшать взамен. Если вы оптимизируете использование памяти, то очень часто будет ухудшаться скорость работы, также как и на оборот. И в обоих случаях будет усложняться код - нужно будет его больше тестировать и больше времени потратить на нахождение ошибок (ведь известно, у одного программиста, количество ошибок в основном пропорционально объему кода, грубо говоря, количество строк).


      Открыть/закрыть
    Оригинал

    Цитата Сообщение от dimonml
    Но преждевременная оптимизация, как правило, зло еще большее. А причина очень проста: заранее, когда еще ничего нет, нельзя сказать, что будет слабым местом.
    Многие скажут ну и что - я все буду оптимизировать. Вот обычная ситуация:

    Есть задача, на реализацию которой уйдет день. Но мы не думаю начинаем все оптимизировать - в итоге написание заняло 5 дней (оптимизация = более сложный код = больше вероятность ошибок = больше времени на тестирование, не говоря уже о поддержке в будущем). В результате оптимизации было выиграно 5 процентов процессорного времени и 10 процентов использования памяти. Почему так? Потому что на момент оптимизации не было ясно что будет узким местом и оптимизация чего может дать заметный выигрыш.

    Но безусловно, не стоит пессимизировать код - делать его заранее не оптимальным, без явной на то необходимости. Яркий пример пессимизации - это использование циклов от 0 до максимального количества игроков, на каждой итерации которого вызывается ИзПлаерКоннектед, вместо того чтобы использовать foreach


    Часть информации из них уже потеряла свою актуальность, ибо это пережитки 2010-ых, но общая мысль в них, как по мне, очень правильная. В своё время они "вправили" мне голову и я перестал тратить время на то, чтоб днями придумывать как выдачить из кода пару лишних миллисекунд.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    SooBad (14.11.2017)
  12. #29
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я говорил лишь для примера.
    Даже если и так, это выглядело как либо дезинформация, либо неосведомлённость. Пара миллисекунд в некоторых ситуациях всё же могут иметь значение, чего уж точно не скажешь о 25 наносекундах.

    И на самом деле я даже не знаю, может быть стоит удалить эту статью? В ней едва объясняется принцип работы итераторов (а это кое-что посложнее просто добавления/удаления элементов из обычного массива), но при этом у новичков от неё может остаться ложное представление об оптимизации кода. В конце концов, неоптимизированный код - это плохо, но ещё больший грех - чрезмерная оптимизация в ущерб читаемости кода.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  13. #30
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Даже если и так, это выглядело как либо дезинформация, либо неосведомлённость. Пара миллисекунд в некоторых ситуациях всё же могут иметь значение, чего уж точно не скажешь о 25 наносекундах.
    Эмм, обычно в таких ситуациях следует отказываться от реализаций при помощи циклов в угоду тех же индивидуальных таймеров.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

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

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

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

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

Ваши права

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