Небольшой вопрос, насколько сильно нагружает оптимизацию хеш таблица и остаются ли остаточные данные после ее очищения?

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

ответ
Скачаю чистый варкрафт 1.26 попробую.
Рекомендую эти торренты.
Русская версия.
Английская версия.
ответ
Сохраняете на хэндл здания группу юнитов и дело в шляпе.
ответ
Black Soul:
ArhiMEN:
Я посмотрел, но возникла проблема. Я тупой и не могу написать также, но моменте добаления юнита в хеш таблицу. Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
Так не нужно ничего самому делать. Я прикрепил к тому сообщению карту. В ней я уже все сделал сам. Тебе осталось только скопировать триггеры оттуда в свою карту и заменить юнитов на тех, которые тебе нужны. Вот та карта:
Bergi_Bear, хеш-таблицы — это проще простого. Они не требуют множество действий для работы. Достаточно только понять принцип.
ответ
Стас Орлов, ну ты же как-то прикрепил группу к строению? Тут тоже самое, только строение к юниту.
call SaveUnitHandle(твой_хеш, GetHandleId(твой_юнит), твоё_число, твоё_строение)
При смерти узнавай строение.
set Host = LoadUnitHandle(твой_хеш, GetHandleId(умерший_юнит), твоё_число)
set Dead = LoadInteger(твой_хеш, GetHandleId(Host), другое_твоё_число)
call SaveInteger(твой_хеш, GetHandleId(Host), другое_твоё_число, Dead + 1)
// Не забываем чистить хеш.
call FlushChildHashtable(твой_хеш, GetHandleId(умерший_юнит))
Через некоторое время создавай новых юнитов.
set Group = LoadGroupHandle(твой_хеш, GetHandleId(твоё_строение), твоё_число_2)
set Dead = LoadInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число)
if Dead > 0 then
    call SaveInteger(твой_хеш, GetHandleId(твоё_строение), другое_твоё_число, 0)
    loop
        set Dead = Dead - 1
        set Unit = CreateUnit(...)
        call GroupAddUnit(Group, Unit)
        call SaveUnitHandle(твой_хеш, GetHandleId(Unit), твоё_число, твоё_строение)
        exitwhen Dead == 0
    endloop
endif
ответ
да, массив постоянно будет делать reAllocMem , если текущий размер окажется мельче, чем номер ячейки. Поэтому, если массив будет часто писаться с инкрементом, то выгоднее сперва прописать в последнее допустимое значение (8191 для 26 патча) типа MyArray[8191]=0
чисто чтобы его по памяти не возили туда-сюда каждые X значений (не смотрел, сколько изначально выделяется)
я вот у себя пофиксил такую же байду с таблицей строк. игра выделяет по 16 ячеек под строки, а у меня в доте они генерируются десятками в секунду. Каждую секунду игра делала ре-аллок памяти, а к середине игры там уже несколько мб таблица туда-сюда ездила. Сделал аллок в разы больше - и таблица всего 2 раза переедет за 40 минут игры максимум. Экономия тактов налицо.
Хеш-таблицы вообще не являются массивами, гугл в помощь, поэтому там об этом думать не стоит. Стоит думать лучше о том, чтобы первичных (родительских) ключей было меньше, чем вторичных, чисто исходя из того, что в этом случае перебор по таблице окажется быстрее

38
А какого рода оптимизацию вы проводите?
28
на частых периодиках где что-то там загружается и выгружается из таймера 0.01-0.03125, циклы и подобное может и почувствуешь, если на железе играешь, в остальном вряд ли что-то заметишь
Принятый ответ
14
если не устраивает хеш таблица то используй структуры они "легче"
1
ScorpioT1000, обнуляю локалки и функцию использую FlushChildHashtable

Гуванч,Да не зачем устраивает очень даже просто изучил недавно Хеш но любопытно стало как и к чему и стоит ли сувать ее везде где удобно
Чтобы оставить комментарий, пожалуйста, войдите на сайт.