Добавлен
Обязательно ли очищать хеш-таблицу через FlushChildHashtable(...)? Смотрел на сайтах wc3c.net, hiveworkshop.com разные наработки и нигде не увидел данную функцию, в то время как на этом сайте её всё же используют.

Говоря прямо о вопросе треда, замечу, что FlushChildHashtable стоит применять перед сохранением данных в хэш-таблицу при условии, что в конкретной ячейке таблицы гипотетически что-то может находиться (i.e. данные в неё кладутся БЕЗ использования GetHandleId).

бояться утечек нечего
Просто в качестве примера: я где-то встречал огромную систему динамического изменения текстур террейна посредством уберсплатов, которая при определённых условиях с достаточно большой скоростью выпиливала старые и создавала новые; в этой системе уберсплаты не утекали, но, случись такое, выделенные 2 гига оперативы кончились бы относительно быстро.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Если имеется в виду очистить по первому ключу, то это FlushChildHashtable(hashtable, parentKey).
Если очистить по двум ключам, то можно просто записать в эту ячейку null.
По второму вопросу — конечно, можно, храни и загружай когда хочешь -_-
ответ
Зависит от прокладки между стулом и клавиатурой. На вкус и цвет, как говорится.
ответ
Для спеллов достаточно хештаблицы, массивы самое то для всяких систем перемещения, молний, очень часто повторяющихся операций с большими числом объектов....
Часто системы идут уже с собственным системами хранения данных, timer utils юзает свой атач на таймер или хештаблицу, ну и так далее.

32
ScopteRectuS, нужно если вы не собрались использовать эту ячейку еще раз.
Там где единожды записанные данные используются все время до конца игры нет нужды очищать таблицу, ну а так где 1 раз за всю игру, разумеется стоит очищять.
Темболее сейчас часто используют наработки вроде TimerUtils и структур vJass, а там записть только 1 целого числа и удаление его RemoveSavedInteger (или как то так, я уже и забыл)
21
quq_CCCP, Понял, а если в ячейке хранится тип int, real, bool, string, texttag их же можно не удалять?
а где хранится тип handle, то обязательно удалять? иначе будет утечка?
21
nvc123, DracoLich писал обратное, и его можно создавать локально и это не вызовет десинк.
30
ScopteRectuS, нельзя создавать локально экземпляры тех объектов, состояние которых так или иначе подлежит синхронизации между игроками (при этом у синхронизируемых объектов зачастую есть несинхронизируемые характеристики состояния).
Тем не менее, возможность создавать что-то локально без приведения к десинхронизации никак не говорит о том, что такие объекты не могут вызывать т.н. "утечек".

Относительно texttag стоит заметить, что это не текст, а расположеный в игровом пространстве объект, этот текст выводящий. Сам текст, являющийся string чистить бессмысленно, за деталями - в статьи на сайте (с учётом реализации таблицы строк в JASS) или в википедии (для более общих или иных частных случаев).

Да и в целом советую почитать про то, что такое хеш-таблица.
21
Clamp,
DracoL1ch:
Для продвинутых:
тексттаги не являются настоящими агентами и существуют на компе отдельно от прочего, как и молнии, например. их можно создавать в локальном коде, их не нужно нуллить.
16
каждый объект агент, каждый хендл агент, но не каждый хендл или агент обязаны быть синхронными. из определения ничего не узнать, просто берешь хендл любого созданного тобой объекта. Если он меньше 1000 - это асинхронный объект
30
ScopteRectuS, как твой ответ (вернее, ответ DracoL1ch) входит в хоть какую-нибудь конфронтацию с тем, что я описал в сообщении выше? В чём была цель подобного цитирования, если оно не привнесло в тред вообще ничего конструктивного, являясь уточнением уже описанного конструктива?

DracoL1ch, емнип, с тексттагами можно было где-то накосячить и таки лишиться активных ссылок на уже существующие (глобально или локально - не так важно) тексттаги без указанного лайфспана => концептуально они утечны, и практически это зависит исключительно от использования.
16
локальные объекты протекать могут, конечно, но их упустить сложнее. текст таги имеют длительность жизни, которая их корректно стирает. у молний и уберсплатов лимита я не знаю, есть ли он вообще или нет. а если лимита нет, то и бояться утечек нечего
30
Говоря прямо о вопросе треда, замечу, что FlushChildHashtable стоит применять перед сохранением данных в хэш-таблицу при условии, что в конкретной ячейке таблицы гипотетически что-то может находиться (i.e. данные в неё кладутся БЕЗ использования GetHandleId).

бояться утечек нечего
Просто в качестве примера: я где-то встречал огромную систему динамического изменения текстур террейна посредством уберсплатов, которая при определённых условиях с достаточно большой скоростью выпиливала старые и создавала новые; в этой системе уберсплаты не утекали, но, случись такое, выделенные 2 гига оперативы кончились бы относительно быстро.
Принятый ответ
16
утечка - это 4 байта. сколько таких надо, чтобы заполнить зхотя бы гиг памяти? вот неразрушенный объект - другой вопрос
30
DracoL1ch, уберсплат - тоже объект, пусть и лёгкий. Течь же по-разному может, где ссылка, а где и сам экземпляр.
32
DracoL1ch, смотря сколько их плодится, видел карту по 9000 в минуту+ еще 100500 обьектов.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.