Добавлен Sergey105
Начал пользоваться системой HandleCounter которая показывает висящие хедлы . так вот заметил фишку
после создания группы вне зависимости локальная или глобальная и после удаления ,обнуления всё равно handle висит. Это баг системы или группа не удаляет ссылку handle?
после создания группы вне зависимости локальная или глобальная и после удаления ,обнуления всё равно handle висит. Это баг системы или группа не удаляет ссылку handle?
Принятый ответ
Не все хендлы удаляются мгновенно, некоторые висят какое то время, требуемое для утилизации.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Sergey105
GroupClear(g)
DestroyGroup(g);
g = null;
поверил ещё один метод он работает если верить системе
globals
group g = CreateGroup();
endglobals
void DG(){
DestroyGroup(g);
g = null;
}
вот если что система не помню где её нашел
просто делаю карту и мне не надо чтобы она через мин 20 лагала хоть как то
это я не начал ещё спелы делать а чисто старт карты а при спелах я не представляю сколько так будет висеть хендалов
и да есть возможность как-то самому обнулить handle ?
короче я кажется понял он не удаляется пока не создам новый
поставил в таймер с периодом 0.01 и система показывает то 2 то 1 но не больше
trigger t = CreateTrigger();
DestroyTrigger(t);
t = null;
Sergey105:
а так что триггеры что группы и тд гонят при инициализации карты
я вот фишку нашел одну хз баг это и ли нет
но вот 2 примера
Пример 1 он показывает что создано 2080 хенодлов это с учетом зданий декоров и тд_______________________________________________________________
void add_struct(){
group g = CreateGroup();
region r = CreateRegion();
trigger t = CreateTrigger();
trigger t2 = CreateTrigger()
DestroyTimer(GetExpiredTimer());
GroupEnumUnitsInRect(g, bj_mapInitialPlayableArea, function ActionsFunc);
DestroyGroup(g); g = null;
RegionAddRect(r, bj_mapInitialPlayableArea);
TriggerRegisterEnterRegion(t, r, function ActionsFunc);
t = null; r = null;
TriggerRegisterPlayerUnitEvent(t2, Player(0x00), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x01), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x02), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x03), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x04), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x05), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x06), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x07), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x09), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, null);
TriggerAddCondition(t2, Condition(function ActionsFunc));
t2 = null;
}
void BUG(){
timer t = GetExpiredTimer()
TimerStart(t, 0.00, false, function add_struct);
t = null;
}
void InitTrig_AddStruct(){
TimerStart(CreateTimer(), 1.10, false,function BUG);
}
_______________________________________________________________________
когда я запускаю функцию через 2 таймера то норм
но если сделаю по другому запущу на прямую или через 1 таймер показывает 2102 хендела
Триггер нестоит удалять просто так, сразу в его потоке.В доте фрог юзает систему для удаления триггеров, где триггер отключают, удаляют условия и дейсвия и только через минуту удаляют, связано это с багом коллизии хендлов. Фрогу это кто то писал, кодер явно был не дурак. Да и фрога задолбали репортами багов, в вашей карте это может не проявлятся до поры до времени, ибо дота пожалуй самая играймая карта. Но когда популярность возрастет вас тоже засыпят багрепортами.
Локальный и глобальный - это тип переменной, которая может ссылаться на объект.
т.е. нет разницы какая была объявлена переменная, на свойствах объекта это не сказывается