XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Rixt7956

offline
Опыт: 147
Активность:
Оптимизация: хэш или глобалки?
Как лучше оформлять функции?
Хэш:
Код:
function B takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer th = GetHandleId(t)
    local unit u = LoadUnitHandle(hash,th,0)
    //Действия...
        if Условие /*конца действий*/ then
            call FlushChildHashtable(hash,th)
            call PauseTimer(t)
            call DestroyTimer(t)
        endif
    set t = null
    set u = null
endfunction

function A takes nothing returns nothing
    local timer t = CreateTimer()
    local unit u = GetTriggerUnit()
    call SaveUnitHandle(hash,GetHandleId(t),0,u)
    call TimerStart(t,.03,true,function B)
    set t = null
    set u = null
endfunction

Глобалки:
Код:
function B takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer i = 0
        loop
            exitwhen t == Timer[i]
            set i = i+1
        endloop
    //Действия над Unit[i]
        if Условие /*конца действий*/ then
            set Timer[i] = null
            set Unit[i] = null
            call PauseTimer(t)
            call DestroyTimer(t)
        endif
    set t = null
endfunction

function A takes nothing returns nothing
    local integer i = 0
        loop
            exitwhen Timer[i] == null
            set i = i+1
        endloop
    set Unit[i] = GetTriggerUnit()
    call TimerStart(Timer[i],.03,true,function B)
endfunction
Старый 09.05.2011, 17:56
Hanabishi
COOL STATUS
offline
Опыт: отключен
обсуждалось 100500 раз
хеш быстрее для одиночных объектов, либо небольшого количества
если объектов много, то быстрее массив
Старый 09.05.2011, 18:09
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
как тебе удобнее.
я например использую структуры.
но заменяю вейты хешем :3
Старый 09.05.2011, 18:15
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
Поиск перебором - это очень плохо. Очень.
Старый 09.05.2011, 21:37
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
set Timer[i] = null
set Unit[i] = null
глобалки обнулять не требуется
Старый 10.05.2011, 00:23
Еня
Kicked by ScorpioT1000
offline
Опыт: 1
Активность:
да ты клоун я вижу..
а если я в начале игры юзану спелл 10 раз, а дальше по ходу игры будут юзать его не чаще двух-трёх? а кто-то в начале наюзает спеллов и ливнет. итд итп..
я например использую структуры.
но заменяю вейты хешем :3
-_\\
Старый 10.05.2011, 00:44
Rixt7956

offline
Опыт: 147
Активность:
здесь их надо обнулять, что бы освободить место для следущей перезаписи и уменьшить количество действии в цикле во время перебора. Также т.к максимальный номер в массиве 8192 если их не обнулять, то при превышении этого числа возможен вообще отказ функции.

Отредактировано Rixt7956, 10.05.2011 в 10:17.
Старый 10.05.2011, 10:05
Еня
Kicked by ScorpioT1000
offline
Опыт: 1
Активность:
данная проблема возникнет только при тупом поиске ближайшего пустого элемента массива, можно например внести инт, и менять только его значение между 1 и 0
Старый 10.05.2011, 11:48
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:35.