serfreeman1337

Empire-Host.org - Аренда игровых серверов

Сравнение методов получения списка игроков

Иногда перед нами появляется задача узнать индексы нужных нам игроков. Правильнее всего это сделать при помощи функции get_players, но чаще всего в плагинах можно заметить цикл от 1ого до 32ух с проверкой индекса при помощи нативов AMXX. Такой метод называется loop. Применять его в плагинах никак неправильно. И вот почему.

Это вопрос оптимизации, основное правило которого звучит так:

Чем меньше вызовов функций, тем лучше.

Разберем пример с получением индексов всех живых игроков.  Код у нас будет такм:

Теперь подсчитаем кол-во обращения к функциям AMXX и какое время потребовалось на выполнение кода. В этом нам поможет сборка AMXX для профилирования плагинов - AMXX 1.8.2-rev24 profiler. Версия старая, но рабочая :)

Код выполнился за 0.000011 секунд. К функциям обращались 33 раза.

А теперь сравним это с get_players. Код такой:

Данные профилирования:

Наш код выполнился за 0.000002 секунд. Обращение к функциям AMXX было всего однажды.

Для наглядности, давайте проведем стресс-тест, выполним эти блоки кода 1000 раз. Код будет такой:

Результаты:

get_players - 0.000320. loop - 0.009689. Существенная разница, не так ли? Правильный метод быстрее быдлокодого в 30 раз.

Ответ очевиден, использование метода loop – признак плохого кода и не опытности автора, ну, или лени :p

  • Попробуйте прогнать вот эти оптимизированные варианты. Даже с оптимизацией loop выигрывает в 3 раза. На моем процессоре результат 10 секунд loop и 34 секунды get_players.

Добавить комментарий