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

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

Закрытая тема
 
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Рациональность кода
Вот возник вопрос, действительно ли рационально использовать следующие приемы в коде для снижения нагрузки на систему
  1. Заменить все local group g=CreateGroup() на local group g=udg_Temp_Group и впоследствии вместо call DestroyGroup(g) использовать call GroupClear(g)
  1. Заменить все триггеры с событием EVENT_PLAYER_UNIT_ATTACKED на один триггер в котором будут все абсолютно действия через ифзен, связанные с атакой по юниту
  1. Заменить все триггеры с событием EVENT_UNIT_DAMAGED одним триггером в котором будут перечислены и взаимосвязаны все события основанные на получении юнитом урона
  1. Заменить local timer t=CreateTimer() для движения снарядов на триггер с периодическим событием и группой udg_Missles для контроля движения всех снарядов с простым алгоритмом (алгоритм задается при создании юнита через спецфункцию и хэш)
Старый 20.05.2011, 05:09
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
4 неверно, остальное лень растолковывать
и это уже дрочинг на килобайты идк
Старый 20.05.2011, 07:25
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
FKoFF,
1 - бред. Возникнит перемешка групп в паралельных потоках, где есть работа с этой переменной
2 - тоже бред. Несколько параллельных потоков быстрее, чем линейное выполнение 5к строк
3 - аналогично
4 - дык тоже аналогично =)
Старый 20.05.2011, 07:46
spellwerk

offline
Опыт: 4,869
Активность:
2-3 нужно сначало подумать, прежде чем делать что-либо. все зависит от того, что тебе нужно и какая будет нагрузка на этот триггер (если он один). иногда лучше несколько, иногда достаточно одного.
Старый 20.05.2011, 08:03
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Clamp, хз хз, CreateGroup() и DestroyGroup() и без того донельзя тяжелые...
Старый 20.05.2011, 08:03
Doc

offline
Опыт: 63,163
Активность:
  1. Так и нужно, если существует одномоментная надобность провети действия с группами, например, нанести урон в радиусе, тогда даже GroupClear не нужно, если все действия проводить в фильтре.
2, 3. Да, но лучше запусквть новый поток из этого триггера.
  1. У меня вообще все на массиве и одном таймере.
Старый 20.05.2011, 08:54
agentex

offline
Опыт: 34,834
Активность:
alexprey офк не шарит. 2,3,4 все верно, насчет 1 думаю время на создание и уничтожение группы ничтожно, чтобы изза этого париться.
4 кстати идеально делать через TriggerEvaluate по таймеру, это более гибко

Отредактировано agentex, 20.05.2011 в 10:01.
Старый 20.05.2011, 09:55
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
agentex:
время на создание и уничтожение группы ничтожно
там кстати действительно много косяков с группами, скорость работы резко падает при создании групп на коротком периоде (0.03), именно по этому я для начала перекинул часть группы на уникальные для каждого таймера, а позже задумался о рациональности использования пары глобалок
шанс того что две функции будут вызванны 100% одновременно настолько же низок, насколько низок шанс того что два игрока абсолютно одновременно активируют функцию, использующую одинаковые переменные.
К слову хочу заметить что на моей слабенькой машине избавление от спама групп заметно увеличило производительность и снизило лаги.
Старый 20.05.2011, 10:05
Doc

offline
Опыт: 63,163
Активность:
agentex :3
можно закрывать?
Старый 20.05.2011, 10:54
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
2 - тоже бред. Несколько параллельных потоков быстрее, чем линейное выполнение 5к строк
потоки в варе выполняются последовательно, не параллельно.
пора бы знать!
Старый 20.05.2011, 12:30
Doc

offline
Опыт: 63,163
Активность:
Clamp, да ты что? докажешь?
Старый 20.05.2011, 12:44
agentex

offline
Опыт: 34,834
Активность:
это факт
Старый 20.05.2011, 13:41
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Clamp, эмм как бы поток это и подрузамевает, чтобы выполнялось паралельно. Но эта параллельность достигается путём поочередного выполнения команд. Сперва в первом 1 команду, потом во 2 и т.д. Ну как то так... Если бы они все друг за другом выполнялись бы, то движение дамми по циклу повесило бы всю игру. А оно не вешает
Старый 20.05.2011, 14:01
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Doc:
Clamp, да ты что? докажешь?
А то! Вот тебе, получи!
Clamp добавил:
alexprey:
Clamp, эмм как бы поток это и подрузамевает, чтобы выполнялось паралельно. Но эта параллельность достигается путём поочередного выполнения команд. Сперва в первом 1 команду, потом во 2 и т.д. Ну как то так... Если бы они все друг за другом выполнялись бы, то движение дамми по циклу повесило бы всю игру. А оно не вешает
И прямо такая большая и ощутимая разница в скорости загрузки, что огого.
И кстати оно именно так и выполняется, а дамми циклом просто двигать не надо =О
Старый 20.05.2011, 14:24
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Цитата:
Сообщение от Clamp
а дамми циклом просто двигать не надо =О

я знаю что не надо. Но ведь остальные триги выполняется, если сделать так =)
Старый 20.05.2011, 14:56
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
  1. Заменить все local group g=CreateGroup() на local group g=udg_Temp_Group и впоследствии вместо call DestroyGroup(g) использовать call GroupClear(g)
Использовать udg_Temp_Group сразу.
  1. Заменить все триггеры с событием EVENT_PLAYER_UNIT_ATTACKED на один триггер в котором будут все абсолютно действия через ифзен, связанные с атакой по юниту
При правильной организации кода может положительно сказаться на производительности. Рискуете потерять в читаемости.
  1. Заменить все триггеры с событием EVENT_UNIT_DAMAGED одним триггером в котором будут перечислены и взаимосвязаны все события основанные на получении юнитом урона
Затрудняюсь что то сказать, нужно проводить експерименты, не будет ли это течь.
  1. Заменить local timer t=CreateTimer() для движения снарядов на триггер с периодическим событием и группой udg_Missles для контроля движения всех снарядов с простым алгоритмом (алгоритм задается при создании юнита через спецфункцию и хэш)
Использовать место одного триггера один таймер, в вызываемой функции обрабатывать все снаряды.
alexprey написал рекордное количество бреда в теме, я на этом форуме столько еще не видел.
Старый 20.05.2011, 23:30
prog

offline
Опыт: 32,865
Активность:
Потоки в варе выполняются последовательно, но с одним нюансом - новый запускаемый поток приостанавливает выполнение активного потока и возвращает ему управление только по своему завершению (насчет паузы в потоке не скажу - стараюсь ими не пользоваться, но по идее управление также должно возвращаться). Это чуть ли не единственный способ реализовать работоспособную многопоточность без средств синхронизации.
Старый 22.05.2011, 21:28
J64_

offline
Опыт: 4,724
Активность:
1
для GroupEnum'а используй всего одну группу, действия делай в фильтре, не вызывай GroupClear()
2,3
бинарное древо через ифы
4
globals{trigger Trg}
...
TriggerAddAction(Trg,function ...)
TriggerRemoveAction(Trg,func)
...
Trg=CreateTrigger()
TriggerRegisterPeriodicEvent(Trg,0.04)
?
Старый 22.05.2011, 21:57
Msey
????
offline
Опыт: 67,346
Активность:
AdamanTX:
не вызывай GroupClear()
а чем это чревато?
Старый 22.05.2011, 23:07
XyZoD

offline
Опыт: 2,073
Активность:
для снижения нагрузки на систему
Зачем вообще на счёт этого парится? Эти ничтожные функции, (вар 2000г. вроде) они просто не как не влияют на производительность.
Мне кажется AI современных игр грузят систему раз так в 50 больше чем древний вар
Старый 22.05.2011, 23:27
Закрытая тема

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

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

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

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



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