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

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

Ответ
 
Obelick

offline
Опыт: 26,071
Активность:
Не могу найти утечку
Кричу о помощи, моя карта начинает фаталить после 7 часов игры.
Я сделал небольшой эксперимент путем отключения триггеров и выявил, что причина где-то в системе крипов.
Если отключаем систему мобов (скрины ниже), то за час размер сохранения увеличивается всего на 1200 кб и это вполне нормально, ведь для того, чтобы вар кританул нужно наиграть овер 75 часов, поэтому эта мелкая утечка меня вообще не напрягает.
А вот если система включена и работает, то сохранение набирает уже по ~10000 кб в час и я просто не знаю, что с этим делать. Я напрочь не вижу утечек в этих триггерах. Может быть я слепой?
Миниатюры
Кликните на картинку для увеличения
Название:  1.jpg
Просмотров: 55
Размер:  202.7 Кбайт  Кликните на картинку для увеличения
Название:  2.jpg
Просмотров: 35
Размер:  187.7 Кбайт  
Старый 08.02.2015, 19:32
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Святая Рена, зачем прятать юнит перед удалением? Зачем удалять удалённый из игры юнит из группы?
Старый 08.02.2015, 19:40
Obelick

offline
Опыт: 26,071
Активность:
Melissa, удаление юнита из группы - это уже экспериментирование после, не из за этого весь сыр-бор.
Старый 08.02.2015, 19:44
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Утечки найдены:
Мувинг крипс при задании создаёт лишнюю группу - юниты в области, после создания выирается 1 юнит и задается как мувингрупс, последнюю ты удаляешь, (ага даже не удаляешь а только очищаешь) а вот утечка "юниты в области" остаётся.
bj wantdestroygroup можешь вообще не юзать, эта фигня не работает. Так что после очистки и зануления нужно написать call DestroyGroup(udg_Группа)
Melissa добавил:
Итого, только из того, что вижно на скрине - у тебя утекает 90 групп в минуту, а это вообще-то много.
Старый 08.02.2015, 19:47
Obelick

offline
Опыт: 26,071
Активность:
Melissa, блин, а ведь серьезно. Я за столько лет так ни разу этого и не заметил, вот лол. Т.е. после каждого пика нужно обязательно удалять группу и создавать заново?
Obelick добавил:
Щас короче проверю и отпишусь. Если действительно сработает, руки твои буду целовать
Старый 08.02.2015, 19:52
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Объясняю доходчиво:
группа 1 - юниты в области Область
группа 2 - случайные Х юнитов из группы 1
выбрать всех в группе 2
действия
очистка/обнуление группы 1
уничтожение группы 1
очистка/обнуление группы 2
уничтожение группы 2
Melissa добавил:
На слабых компутерах утечка пик еври юнит вообще может заставить комп зависнуть если делать пару раз в секунду.
Старый 08.02.2015, 19:55
Obelick

offline
Опыт: 26,071
Активность:
Melissa, вот так должно это выглядеть?
Миниатюры
Кликните на картинку для увеличения
Название:  3.jpg
Просмотров: 40
Размер:  103.0 Кбайт  
Старый 08.02.2015, 20:08
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Дооо.
Только bj wantdestroy убери. Во первых это плацебо, во вторых всякие ифы оно портачит по идее.
Так или иначе но когда юзаешь destroygroup wantdestroy не нужен однозначно.
Старый 08.02.2015, 20:17
Obelick

offline
Опыт: 26,071
Активность:
Где-то мы допустили ошибку. Утечки все еще где-то есть, но стало их ровно в 2 раза меньше судя по весу сохранений за 15 минут игры.
Старый 08.02.2015, 21:07
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Остальные триггеры надо смотреть.
И хотя даже если удалять утечку группы правильно - она немножко всё равно засоряет память, но не настолько чтобы лаги были.
Проверь себя на наличие типичных допущений утески групп игроков типа
Игра показать сообщение группа(игрок 1 красный) бла бла.
Что там ещё...регионы проверь, не пикаешь ли ты где-нить юниты в регионе с размерами 500 500 вокруг точки ТОЧка.
Старый 08.02.2015, 21:18
Borodach

offline
Опыт: 5,767
Активность:
Строчкой в cs: call GroupEnumUnitsInRect("Група" - udg_MovingCreeps, "Область" - gg_rct_Beach_1, null)
переменная БЕ = случайный юнит из групы
если - условия
то - действия
Старый 08.02.2015, 21:22
Obelick

offline
Опыт: 26,071
Активность:
Melissa, это именно проблема в этом триггере. Остальные подозрительные на утечки были отключены.
Старый 08.02.2015, 21:27
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Ну тогда хз, мб не обнуляется как следует.
Лучше будет только использовать группы как константы.
Например имеется группа крипс 1 на всю игру.
Юнит входит в регион РЕГИОН
тип юнита бла бал бла все проверки как в ифе у тебя
добавить юнит в группу крипс
а в этом триггере брать случайный юнит из этой группы.
И кстати если он всего 1 берётся, то группу делать глупо, задаешь юнит = случайный юнит из группы и работаешь с переменной. Так ты не создаёшь ещё 1 группу при задании вообще.
Таким образом создавать временные группы вообще не надо будет. Собственно, я так чаще всего спеллы и делаю...
Старый 08.02.2015, 21:33
Obelick

offline
Опыт: 26,071
Активность:
Melissa, короче завтра уже буду решать проблему дальше. Если ничего не изменится, то дам им просто нейтрально-бродячего и все, а то 6 часов на это сегодня убил
Старый 08.02.2015, 21:35
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Obelick, ну вообщем имей в виду. что использовать одни и те же переменные лучше чем плодить и дестроить.
Это так же относится и к регионам и к точкам, их можно просто передвигать на координаты, а не задавать каждый раз новые объекты и потом уничтожать.
Старый 08.02.2015, 21:37
ScorpioT1000
Работаем
offline
Опыт: отключен
поставьте jngp с cjass с галкой автообнуления всех переменных
Старый 09.02.2015, 10:08
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Obelick, вообще создай одну глобальную группу и юзай ее.
Старый 09.02.2015, 11:23
Obelick

offline
Опыт: 26,071
Активность:
ScorpioT1000, эта галка и так стоит у меня
Obelick добавил:
все, я сдаюсь. Я забил на тот триггер и просто дал монстрам бродячего, но вот эти триггеры все равно остаются утечными, и я просто не знаю что делать.
Когда они выключены, размер сохранения увеличивается всего на 800 кб за час, а когда они включены, то на 4000. Это вообще жесть, с которой я не знаю как уже бороться.
Миниатюры
Кликните на картинку для увеличения
Название:  5.jpg
Просмотров: 30
Размер:  216.7 Кбайт  Кликните на картинку для увеличения
Название:  4.jpg
Просмотров: 20
Размер:  193.3 Кбайт  
Старый 09.02.2015, 16:18
ScorpioT1000
Работаем
offline
Опыт: отключен
не надо ремув юнит делать, надо килл и убрать время разложения у него
если надо визуальный эффект, то скрыть и килл
ScorpioT1000 добавил:
тоадкоп говорит, ещё ордеры утекают сами по себе, но это надо начисто проверять
мне кажется, какие-то данные кешируются
попробуй ifdebug 2 или просто вывод GetHandleId у локаций и юнитов (отметив еще, где это именно вызвалось), они должны когда-либо перестать расти, если растут - в чем-то проблема
ifdebug2 надо задать путь до лога и он будет выводить тебе счетчик хендлов каждые пять секунд

Отредактировано ScorpioT1000, 09.02.2015 в 21:19.
Старый 09.02.2015, 21:12
Obelick

offline
Опыт: 26,071
Активность:
ScorpioT1000, тут дело далеко не в ремуве. Юниты ремуваются, если игрок видит эту точку, а я стоял на одном месте все время тестирования.
Я попробую то, что ты скинул. Отпишусь с результатами потом.
Старый 10.02.2015, 15:48
Ответ

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

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

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

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



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