В предыдущем моём вопросе мне предложили подобный тип безутечного перебора большой группы.
GUI
В целом, вроде утечек то и нет, но из-за перебора 500+ юнитов и игнорируя что часть из них мертвы вызывает заметные микрофризы. (Особенно у людей со слабым пк)
Собственно есть идеи как можно оптимизировать это?
PS: Внутри пика множество проверок ifthenelse
GUI

Принятый ответ

Изначально было как обычно, через множество групп с нужной выборкой и их очистку. Но было падение фпса, спустя определенное время игры. С помощью счетчика хендлов выяснили что "Pick every unit in" вызывает утечки. Был предложен такой вот метод выбора всех юнитов через локалку и с помощью ifthenelse отсеивать нужных. В принципе помогло с фпсом. Он стабильный. Но вот видимо все эти переборы вызывают микрофризы.
А утечки точно из-за самого выбора? Насколько знаю, нативные функции утечек не вызывают, а BJ реализация ForGroup вроде без утечек...
Мб дело в обработке группы было?
И на счёт групп - пробовали выделить заранее штук сто-двести глобальных групп и использовать по необходимости? Без создания новых.
Кстати, GetUnitsInRangeOfLocMatching() вроде вызывает утечку. Это получение группы юнитов, находящихся внутри окружности с радиусом и подходящих по условию. Утечка в том, что возвращается локальная переменная. Лечится как раз использованием глобальной переменной. (Глобальной переменной присваивается значение локальной, локальная обнуляется, глобальная возвращается)
Venommm:
Если такой способ действительно эффективней, можно пожалуйста самый элементарный пример, хотябы в виде скрина.
Вам ну гуи, да? По моему, на гуи так не получится. Насколько помню, GroupEnumUnitsInRange() и ForGroup() нет в действиях, а аналоги утечны. Но я могу и ошибаться, сужу по коду в Blizzard.j, а не по тестам.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
9
3 года назад
0
Изначально было как обычно, через множество групп с нужной выборкой и их очистку. Но было падение фпса, спустя определенное время игры. С помощью счетчика хендлов выяснили что "Pick every unit in" вызывает утечки. Был предложен такой вот метод выбора всех юнитов через локалку и с помощью ifthenelse отсеивать нужных. В принципе помогло с фпсом. Он стабильный. Но вот видимо все эти переборы вызывают микрофризы.
А утечки точно из-за самого выбора? Насколько знаю, нативные функции утечек не вызывают, а BJ реализация ForGroup вроде без утечек...
Мб дело в обработке группы было?
И на счёт групп - пробовали выделить заранее штук сто-двести глобальных групп и использовать по необходимости? Без создания новых.
Кстати, GetUnitsInRangeOfLocMatching() вроде вызывает утечку. Это получение группы юнитов, находящихся внутри окружности с радиусом и подходящих по условию. Утечка в том, что возвращается локальная переменная. Лечится как раз использованием глобальной переменной. (Глобальной переменной присваивается значение локальной, локальная обнуляется, глобальная возвращается)
Venommm:
Если такой способ действительно эффективней, можно пожалуйста самый элементарный пример, хотябы в виде скрина.
Вам ну гуи, да? По моему, на гуи так не получится. Насколько помню, GroupEnumUnitsInRange() и ForGroup() нет в действиях, а аналоги утечны. Но я могу и ошибаться, сужу по коду в Blizzard.j, а не по тестам.
Принятый ответ
0
27
3 года назад
0
А утечки точно из-за самого выбора? Насколько знаю, нативные функции утечек не вызывают, а BJ реализация ForGroup вроде без утечек...
Нативные функции вызывают утечки, если их не обнулять. Та же работа с точками.
В бж for group нет утечек, туда лишь добавили условие по уничтожению группы если bj_wantDestroyGroup равна true. Но следующие функции вызывают утечку, например, выбрать всех юнитов на карте, там создаётся локальная группа которая никуда не девается
2
9
3 года назад
Отредактирован map_maiker
2
Нативные функции вызывают утечки, если их не обнулять. Та же работа с точками.
Сами по себе они не формируют утечек же.
rsfghd:
В бж for group нет утечек, туда лишь добавили условие по уничтожению группы если bj_wantDestroyGroup равна true. Но следующие функции вызывают утечку, например, выбрать всех юнитов на карте, там создаётся локальная группа которая никуда не девается
Я так и написал, разве нет?
1
32
3 года назад
1
На гуи подобное лучше не делать, там пипец мусорного кода после сохранения карты в war3map.j
0
18
3 года назад
0
А утечки точно из-за самого выбора? Насколько знаю, нативные функции утечек не вызывают, а BJ реализация ForGroup вроде без утечек...
Мб дело в обработке группы было?
В том и суть, я сам удивился.
map_maiker:
И на счёт групп - пробовали выделить заранее штук сто-двести глобальных групп и использовать по необходимости? Без создания новых.
Попробовал не создавать группу заново, а просто добавлять в неё всех юнитов и удалять ненужных. Вроде ничего не поменялось.
map_maiker:
Кстати, GetUnitsInRangeOfLocMatching() вроде вызывает утечку. Это получение группы юнитов, находящихся внутри окружности с радиусом и подходящих по условию. Утечка в том, что возвращается локальная переменная. Лечится как раз использованием глобальной переменной. (Глобальной переменной присваивается значение локальной, локальная обнуляется, глобальная возвращается)
Так и делаю, где нужно.
map_maiker:
Вам ну гуи, да? По моему, на гуи так не получится. Насколько помню, GroupEnumUnitsInRange() и ForGroup() нет в действиях, а аналоги утечны.
Через кастом скрипт?
0
9
3 года назад
0
В том и суть, я сам удивился.
Может дело в том, что какое-то из действий утечно? Не сама работа с группами, а что-то другое.
Через кастом скрипт?
Можно, да.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.