|
|
|
|
Удаление утечек
|
|
EvilPeon | Дата: Воскресенье, 17 Августа 2014, 17:05:55 | Сообщение # 1 |
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
| Всем привет, я сделал способность с даммиком, который летит от героя и станит первого противника + наносит статы героя. Вот сбно 2 триггера, 1 запускает способность, а 2 на само движение. Я вроде удалил все точки и попытался избавиться от переменных, однако скачанная мной системка Hundle Сounter стабильно находит 100 утечек (если рядом с дамми почти сразу оказывается противник, то меньше). Помогите плиз уменьшить их кол-во на GUI
http://img.lostpic.net/orig_images/b/f/5/bf541223b5e537a3325205427e555071.jpg
http://img.lostpic.net/orig_images/0/3/c/03c75044dd28e5e9af0488937cc58988.jpg
|
|
|
|
FEARKILLER | Дата: Воскресенье, 17 Августа 2014, 21:02:14 | Сообщение # 2 |
6 уровень
Группа: Проверенные
Сообщений: 175
Награды: 0
Репутация: 149
Блокировки:
| Цитата EvilPeon ( ) Всем привет, я сделал способность с даммиком, который летит от героя и станит первого противника + наносит статы героя. Вот сбно 2 триггера, 1 запускает способность, а 2 на само движение. Я вроде удалил все точки и попытался избавиться от переменных, однако скачанная мной системка Hundle Сounter стабильно находит 100 утечек (если рядом с дамми почти сразу оказывается противник, то меньше). Помогите плиз уменьшить их кол-во на GUI Чувак, если ты юзаешь GUI, то забудь про максимальную оптимизацию и полное устранение утечек. И тут дело не столько в твоих хорошо/плохо написанных триггерах(или кривых руках), а в БЖ функциях, на которых работает GUI, вот как раз эти БЖ функции сами по себе и утекают, потому что писал их какой-то криворукий баран.
У тебя есть 2 варианта: 1 - Ты продолжаешь юзать GUI, забив на всё и максимум что можешь сделать для устранения утечек, это удалять за собой точки, эффекты, группы, дамми-юнитов и прочий мусор, этого будет вполне достаточно для GUI. В обнулении глобалок, также нет нужны, они при следующем использовании перезапишутся. 2 - Ты переходишь на Jass и в чистом виде пишешь свой код, в этом случае уже, утечки будут зависеть только от твоих прямых рук.
Делаю из воды вино, хожу по воде...
|
|
|
|
EvilPeon | Дата: Понедельник, 18 Августа 2014, 13:15:57 | Сообщение # 3 |
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
| FEARKILLER, как джасс-то учить неохота) Просто я читал, что все утечки от полярных координат, и надо по X и Y дамми двигать, но никак не догоню как. Мб существует такой способ с локалками и кастом скриптом?
|
|
|
|
Bibo | Дата: Понедельник, 18 Августа 2014, 20:24:29 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Цитата FEARKILLER ( ) БЖ функции сами по себе и утекают, потому что писал их какой-то криворукий баран. Цитата EvilPeon ( ) что все утечки от полярных координат Не только. В GUI можно контролировать утечки, но это возможно только посредством CS вставок, иначе говоря, ты уже используешь Jass. Так от чего не отбросить сомнения и не прокачать мозги? Кто знает, быть может читать мысли научишься. На картинках не узрел ничего смертельного. Могу пенять только на строчку set bj_wantDestroyGroup = true, где-то поднимался разговор, о бесполезности этой bj-переменной, то есть, лишняя группа после сего присвоения удалена не будет.
|
|
|
|
EvilPeon | Дата: Понедельник, 18 Августа 2014, 22:07:19 | Сообщение # 5 |
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
| Цитата Bibo ( ) Могу пенять только на строчку set bj_wantDestroyGroup = true, где-то поднимался разговор, о бесполезности этой bj-переменной, то есть, лишняя группа после сего присвоения удалена не будет. Хм, добавил группу в переменную, очистил ее, удалил с помощью call DestroyGroup - результат тот же(100 утечек). Или и там и там не работает, или работает одинаково. Не согласен на счет set bj_wantDestroyGroup = true, т.к. видел такой cs скрипт в стандартной карте от Blizzard "Шоколадные войны", все группы чистились там именно таким способом. Кому как ни им лучше знать как оптимизировать свой косячный код)
|
|
|
|
Q1wAse | Дата: Вторник, 19 Августа 2014, 09:15:28 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 1235
Награды: 0
Репутация: 286
Блокировки:
| Не надо гнать на bj_wantDestroyGroup. Он прекрасно работает для GUI'шнников, если им уметь правильно пользоваться.
|
|
|
|
Borodach | Дата: Вторник, 19 Августа 2014, 10:19:46 | Сообщение # 7 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Поиск групы создает 2 локальные переменные групы, а bj_wantdestroygroup очистит только одну. Добавлено (19 Августа 2014, 10:19:46) --------------------------------------------- Попробуй убрать поиск групы и проверить сколько утечек тогда.
Karamba
|
|
|
|
FEARKILLER | Дата: Вторник, 19 Августа 2014, 13:43:53 | Сообщение # 8 |
6 уровень
Группа: Проверенные
Сообщений: 175
Награды: 0
Репутация: 149
Блокировки:
| Цитата Bibo ( ) Потрясающе! Но можно пожалуйста поинформативнее ответ?
Делаю из воды вино, хожу по воде...
|
|
|
|
Borodach | Дата: Вторник, 19 Августа 2014, 14:33:32 | Сообщение # 9 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Поинформативнее, в том что ты не прав. Потому что бж функции не вызывают утечек (ну 1 или 2), они написаны для графического джасса, то есть ГУИ, чтоб новичкам было проще работать с триггерамм. А плохо это тем что простые действия в пару строк (джассом), в гуи будет вызваны дополнительные функции и конвертации (к примеру точки в координаты), в общем теряются дольки секунды на обработку триггера.
Karamba
|
|
|
|
FEARKILLER | Дата: Вторник, 19 Августа 2014, 16:03:15 | Сообщение # 10 |
6 уровень
Группа: Проверенные
Сообщений: 175
Награды: 0
Репутация: 149
Блокировки:
| Цитата Borodach ( ) Потому что бж функции не вызывают утечек (ну 1 или 2), они написаны для графического джасса, то есть ГУИ, чтоб новичкам было проще работать с триггерамм. А плохо это тем что простые действия в пару строк (джассом), в гуи будет вызваны дополнительные функции и конвертации (к примеру точки в координаты), в общем теряются дольки секунды на обработку триггера. А как же локальные переменные не обнуляемые, их то не забыл упомянуть? Я в курсе для какой цели были написаны бж и не про это хотел услышать, а про то что они якобы не утечны и полностью безопасны. Но если так оно и есть, то почему я ни разу не видел чтобы гуишные бж функции даже самые простые(типо SelectUnitForPlayerSingle или PanCameraToTimedForPlayer) юзались джассерами, окромя мб функций которые используют внутри себя только real, integer, boolean типы переменных, например IMinBJ/IMaxBJ/RMinBJ/RMaxBJ/ModuloInteger/ModuloReal/IntegerTertiaryOp и прочие.
Цитата Borodach ( ) в том что ты не прав. Об этом вообще речи не было, я в грудь кулаком себя не стучал. Всего лишь хотел увидеть в ответ не просто смайл, а что-то более: Цитата Borodach ( ) Поинформативнее,
Делаю из воды вино, хожу по воде...
|
|
|
|
EvilPeon | Дата: Вторник, 19 Августа 2014, 20:21:40 | Сообщение # 11 |
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
| Цитата Borodach ( ) Попробуй убрать поиск групы и проверить сколько утечек тогда. Убрал поиск, при первом касте создаются 4 утечки, потом утечек вобще нет. А ты не знаешь, как 2 группы при поиске обнулить? Буду очень благодарен
|
|
|
|
Borodach | Дата: Среда, 20 Августа 2014, 23:39:15 | Сообщение # 12 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Обнулить не получится, но можно добавить строку на джассе чтоб избавится от создания 2. Создай 2 переменные, группа и точка. В личном сценарии: call GroupEnumUnitsInRange(udg_название групы, GetLocationX(udg_название точки), GetLocationY(udg_название точки), нужный радиус, null) После, выбирай в поиске группы переменную группы.
Karamba
|
|
|
|
Bibo | Дата: Четверг, 21 Августа 2014, 16:45:45 | Сообщение # 13 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Цитата Borodach ( ) В личном сценарии: call GroupEnumUnitsInRange(udg_название групы, GetLocationX(udg_название точки), GetLocationY(udg_название точки), нужный радиус, null) Для гуишника можно попроще. call GroupEnumUnitsInRangeOfLoc(udg_Группа, udg_Точка, радиус, null)
Сообщение отредактировал Bibo - Четверг, 21 Августа 2014, 16:50:09 |
|
|
|
EvilPeon | Дата: Четверг, 21 Августа 2014, 18:40:54 | Сообщение # 14 |
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
| Borodach, Bibo, спасибо Вам большое, Вы конечно все и так мне разжевали и в рот положили, но у меня при обоих способах даммик почему-то просто движется, отказываясь наносить урон и станить
Вот скрин (пробовал и с тем, и с другим скриптами) http://savepic.org/5907408.png
|
|
|
|
Borodach | Дата: Четверг, 21 Августа 2014, 21:46:50 | Сообщение # 15 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| По моим догадкам, firebolt не может кастовать в движении, нужно создать другoго юнита и у него интелект равен 0, поэтому нет урона... Добавлено (21 Августа 2014, 21:46:50) --------------------------------------------- Также пользуйся 1 действием из предложеных мною и бибо. Какое тебе удобней
Karamba
|
|
|
|
EvilPeon | Дата: Пятница, 22 Августа 2014, 13:36:40 | Сообщение # 16 |
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Блокировки:
| Borodach, с даммиком все норм оказалось, просто группа почему-то сразу удаляется. Убрал удаление группы - все заработало, счетчик тоже утечек не видит. Мб не понимаю чего, но или счетчик тупит, или группа как-то перезаписывается. А так все вроде норм работает, всем спасибо! Нафлужу 30 сообщений стану проверенным, поставлю + в репу
|
|
|
|
|
|
|
|
|
|
|