Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 3
    Гостей: 2
    Пользователи: - отсутствуют
    Роботы: crawl Bot

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 1-07-2012, 13:27 Просмотров: 5115

    Урок 17. Что быстрее get_pcvar_num, get_xvar_num или native функции.

    Честно говоря, я сам не особо задавался данным вопросом, так как у меня ни когда не было особых ограничений в использовании ресурсов физических серверов, так как они у меня стоят на собственных "машинах". Но когда искал информацию для описания очередной функции xvar_exists, наткнулся на результаты одного эксперимента, и разумеется решил и вам рассказать о его результатах.

    Основной вопрос эксперимента:
    Что быстрее get_pcvar_num, get_xvar_num или native функции?

    Для эксперимента было написано два коротеньких плагина (плагины представлены в оригинале):
    Первый плагин:
    #include <amxmodx> 

    #define VERSION "0.0.1"
    #define PLUGIN "xvar profile 1"

    public xvar1 = 10

    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, "ConnorMcLeod")
        register_cvar("amx_cvar_test", "1337")
    }

    public plugin_natives()
    {
        register_native("get_variable_test", "get_variable_test")
    }

    public get_variable_test()
    {
        return xvar1
    }

    В нем регистрируется натив и переменная для эксперимента.

    Второй плагин:
    #include <amxmodx> 

    #define VERSION "0.0.1"
    #define PLUGIN "xvar profile 2"

    native get_variable_test()

    public plugin_init()
    {
        register_plugin(PLUGIN, VERSION, "ConnorMcLeod")
    }

    public plugin_cfg()
    {
        new pcvar = get_cvar_pointer("amx_cvar_test")
        new xvar = get_xvar_id("xvar1")

        for(new i; i<1000; i++)
        {
            get_pcvar_num(pcvar)
            get_xvar_num(xvar)
            get_variable_test()
        }
    }

    В нем с помощью цикла вызываются 3 изучаемые функции.

    И теперь самое главное, результаты:

    date: Fri Sep 24 19:18:23 2010 map: de_aztec
    type | name | calls | time / min / max
    -------------------------------------------------------------------
    n | register_plugin | 1 | 0.000001 / 0.000001 / 0.000001
    n | get_cvar_pointer | 1 | 0.000001 / 0.000001 / 0.000001
    n | get_xvar_id | 1 | 0.000001 / 0.000001 / 0.000001
    n | get_pcvar_num | 1000 | 0.000180 / 0.000000 / 0.000000
    n | get_xvar_num | 1000 | 0.000179 / 0.000000 / 0.000000
    n |get_variable_test | 1000 | 0.000245 / 0.000000 / 0.000001
    p | plugin_cfg | 1 | 0.000561 / 0.000561 / 0.000561
    p | plugin_init | 1 | 0.000001 / 0.000001 / 0.000001
    0 natives, 0 public callbacks, 2 function calls were not executed.


    Обратите внимание на эти 3 строки:
    type |             name |      calls | time / min / max
    -------------------------------------------------------------------
       n |    get_pcvar_num |       1000 | 0.000180 / 0.000000 / 0.000000
       n |     get_xvar_num |       1000 | 0.000179 / 0.000000 / 0.000000
       n |get_variable_test |       1000 | 0.000245 / 0.000000 / 0.000001


    Точнее на столбец time это время выполнения для каждой из функций выборка берется для 1000 раз, думаю и так видно, что работает быстрее, но все же расставим по местам:
    • Первое место занимает get_xvar_num
    • Второе место get_pcvar_num
    • Третье место get_variable_test
    Между первым и вторым местом разница не значительная, но как факт есть.
    По этому если вам нужно передать переменную из плагина в плагин, то луче использовать xvar

    Источник:forums.alliedmods.net
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Урок 17. Что быстрее get_pcvar_num, get_xvar_num или native функции.
    Monstr™

    29.09.2011
    ICQ: 631967458
    Публикаций: 12
    Комментариев: 22
    Репутация: -  0  +

    Native в pawn это самая тяжелая операция, по этому ей лучше не злоупотреблять.
    aksktis

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    День добрый, а как проводились измерения? Чем можно померить время выполнения той или иной функции?
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  58  +

    aksktis, гугли по слову amx_profiler
    --------------------

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама