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

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

Закрытая тема
 
alexkill

offline
Опыт: 18,872
Активность:
Кэш или альтернатива кэшу?
Возник вопрос относительно рациональности использования кэша. Одни говорят, что кэш медленный (пока я этого не замечал), другие - еще кое-что.

Хорошо. Тогда вопрос: есть ли альтернатива кэшу? Слыхал о структурах, но не могу найти материала об оных. Кто в курсе этой конструкции, помогите.

Например, вот элементарная передача данных через кэш. Как это будет выглядеть при использовании структур или т.п.? Помогите разобраться, пожалуйста!

Код:
function Kill takes nothing returns nothing
  local timer t = GetExpiredTimer()
  local unit U = I2U(get_object_iparam(t, "caster"))
  call KillUnit(U)
  call DestroyTimer(t)
  call flush_object(t)
  set U = null
endfunction

function Alex takes nothing returns nothing
  local unit caster = GetSpellAbilityUnit()
  local timer t = CreateTimer()
  call set_object_iparam (t, "caster", H2I(caster))
  call TimerStart(s, 5, false, function Kill)
  set caster = null
  set i = 0
endfunction

Отредактировано alexkill, 18.07.2008 в 13:46.
Старый 11.07.2008, 13:31
J
expert
offline
Опыт: 48,447
Активность:
alexkill кеш неподходит для динамический действий, т.к. действительно он медленный... он подохдит только для хранения каких-нибудь статичных данных, типа БД между юнитами и их иконками, защитой, и т.п.

структуры или паралельнывые массивы позволяют сминимизировать обращение к кешу к одному, т.е. передавать только индекс на часть массива в которую перемещать передаваемую информацию, тоже относится и к структурам.
я вот задачку както давал по этой теме (ссылка)

Если вообще не нужен кеш то тут только обходится всякими задротовскими системами по кастрированию хендлов объектов
вот одна неплохая.

Отредактировано Jon, 11.07.2008 в 13:44.
Старый 11.07.2008, 13:37
alexkill

offline
Опыт: 18,872
Активность:
С применением системы Toadcop'a разобрался (правда, с подсказками даже обезяна смогла б сделать это). С методом ее написания - не очень.

Смотрю твой конкурс. Немного начинаю понимать ). Щас будут вопросы...

alexkill добавил:
В принципе разобрался. По сути снова вернулись к глобалкам. Но еще и к кэшу обращаемся. Ладно, буду пробовать и сравнивать.

Спасибо, Jon (наверное, самая распространенная фраза на форуме). )
Старый 11.07.2008, 14:28
Toadcop

offline
Опыт: 54,313
Активность:
alexkill к таймерам есть много способо что то прикрепить =) которые не требует крутых систем =). я вот лично всегда прекеширую пачку таймеров...
Старый 11.07.2008, 15:58
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от Toadcop
я вот лично всегда прекеширую пачку таймеров...


Toadcop, поясни, плз.
Старый 11.07.2008, 16:04
adic3x

offline
Опыт: 108,439
Активность:
кеш медленный да, т.е. медленнее, но его возможности больше
вопрос в том что вам надо хранить, как и откуда брать
Старый 11.07.2008, 20:53
Radiant
Silence
offline
Опыт: 4,907
Активность:
Dota вся на кэше и ничего...
Такчто незнаю, ополчились задроты на этот кэш, по сути ничего страшного если его использовать разумно...
Старый 11.07.2008, 21:24
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
Dota вся на кэше и ничего

в том то и дело что ничего... в ней по большому счету нечему лагать

Цитата:
по сути ничего страшного если его использовать разумно

о да конечно, вопрос в том что можно многие вещи делать проще и лучше без него, кеш что то вроде попсового общего решения для всего и вся, хотя есть некоторые проблемы)
Старый 11.07.2008, 21:54
Radiant
Silence
offline
Опыт: 4,907
Активность:
ADOLF, да я сам его не использую) - просто уж слишком его теранят...
Старый 11.07.2008, 21:56
w3soft
ТГБ тим
offline
Опыт: 1,769
Активность:
Jon
Для хранения статичных данных лучше рс + кв:)

Отредактировано DFlyer, 17.07.2008 в 11:15.
Старый 17.07.2008, 09:50
Freezen
Тут должен быть бред
offline
Опыт: 2,517
Активность:
В приклеплении к таймеру кешем нет ничего плохо. Хуже когда приклепляются к юниту. Тогда уже есть веротяность потери ссылки (если вдруг юнит умрет). Или когда случайно удалят таймер (но это уже из разряда багов).
Старый 17.07.2008, 09:55
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
На сколько я знаю и понимаю, если юнит просто умер, потеря ссылки не случается. Ибо пока есть хоть какие-то ссылки на него, то его хэндл пока хранится в памяти.

Отредактировано DFlyer, 17.07.2008 в 11:30.
Старый 17.07.2008, 11:16
Radiant
Silence
offline
Опыт: 4,907
Активность:
Цитата:
На сколько я знаю и понимаю, если юнит просто умер, потеря ссылки не случается. Ибо пока есть хоть какие-то ссылки на него, то его хэндл пока хранится в памяти.

Да. так и есть.
Цитата:
В приклеплении к таймеру кешем нет ничего плохо.

Я тоже так считаю. И вообще нужно быть очень безолаберным, чтобы потерять хэндл таймера...

Отредактировано DFlyer, 17.07.2008 в 11:30.
Старый 17.07.2008, 11:19
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от w3soft
Для хранения статичных данных лучше рс + кв:)
фунох

Цитата:
Сообщение от DFlyer
На сколько я знаю и понимаю, если юнит просто умер, потеря ссылки не случается. Ибо пока есть хоть какие-то ссылки на него, то его хэндл пока хранится в памяти.
неправильно, если юнит умер, он умер, стек хендлов освобождается от него, и этого юнита больше нет, если вы сохраняете ссылку то это никак не влияет на систему варика, т.к. вы просто сохраняете число. Есть оно или нет - хендл юнита освобождается в любом случае...

Цитата:
Сообщение от Radiant
Я тоже так считаю. И вообще нужно быть очень безолаберным, чтобы потерять хэндл таймера...
Решать переход от кеша к массивам только из-за какихто предрассудков о потере хендла или неправильном его освобождении, или еще какойто фигне, решают только ламеры, настоящий же вопрос именно в производительности, если же нужна производительность выше, то массивы, если нет - кеш, а всякие сопутствующие баги которые часто объявлял адольф против кеша - это исключительно криворукство с ничем больше не связанное...

Отредактировано Jon, 17.07.2008 в 15:43.
Старый 17.07.2008, 15:32
w3soft
ТГБ тим
offline
Опыт: 1,769
Активность:
Jon
Удобнее, быстрее >> лучше
Старый 17.07.2008, 16:17
Toadcop

offline
Опыт: 54,313
Активность:
w3soft расказывай это на Бру =) ...

юзайте то что вы хорошо знаете... это самое важное =)
Старый 17.07.2008, 16:55
w3soft
ТГБ тим
offline
Опыт: 1,769
Активность:
Toadcop
Так и думал, что ты выдашь что-нибудь подобное))
Цитата:
юзайте то что вы хорошо знаете

А вот это +1
З.Ы, Но учиццо никто не мешает
Старый 17.07.2008, 18:12
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
На сколько я знаю и понимаю, если юнит просто умер, потеря ссылки не случается. Ибо пока есть хоть какие-то ссылки на него, то его хэндл пока хранится в памяти.

Кэш не в счёт.
Цитата:
если юнит умер, он умер, стек хендлов освобождается от него, и этого юнита больше нет, если вы сохраняете ссылку то это никак не влияет на систему варика, т.к. вы просто сохраняете число. Есть оно или нет - хендл юнита освобождается в любом случае...

Откуда утечки? С локалок,вестимо.
Старый 17.07.2008, 19:01
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от Jon
структуры или паралельнывые массивы позволяют сминимизировать обращение к кешу к одному, т.е. передавать только индекс на часть массива в которую перемещать передаваемую информацию, тоже относится и к структурам.


А сколько может быть таких индексов? 8192?
Старый 30.07.2008, 14:08
ShadoW DaemoN

offline
Опыт: 36,798
Активность:
Для одного набора массивов - да.
В vJass можно увеличить эту величину (точно не помню максимальное значение, но, вроде бы, вплоть до 40000):
Код:
struct big [12000]
  // . . .
endstruct
Старый 30.07.2008, 14:41
Закрытая тема

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

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

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

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



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