[Вопрос] Удаление некоторых утечек
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 22:33:56 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Конечно же немного глупые вопросы, но я сомневаюсь что многие знают на них точные ответы: 1) - Как удаляется локальный таймер? Сначала надо call DestroyTimer(t) а потом set t=null, или наоборот, или хватает только call DestroyTimer(t)?
2) - Как удаляется юнит? Надо сначала call RemoveUnit(unit) а потом set unit=null, или наоборот? И если unit это всего лишь временный указатель на юнита, то хватает set unit=null, не? Не надо же потом писать call RemoveUnit(unit)?
3) - Что бы удалить точку, хватает call RemoveLocation(p), или потом надо написать set p=null?
4) - Что бы окончательно удалить группу, надо сначала удалить из неё всех юнитов с помощью call GroupRemoveUnit(g, u)? Или этого делать не обязательно?... Дальше, call DestroyGroup(g), а потом set g=null? Или наоборот, или обнулять не обязательно
5) - Хватает ли call DestroyEffect(e), чтобы избавиться от самой страшной утечки в джассе, или же потом надо переменную обнулить - set e=null
|
|
|
|
[DUОS] | Дата: Пятница, 23 Сентября 2011, 22:49:38 | Сообщение # 2 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (FatalBlade) Как удаляется локальный таймер? Сначала надо call DestroyTimer(t) а потом set t=null, или наоборот, или хватает только call DestroyTimer(t)? В зависимости от того, какой таймер. DestroyTimer(t) и set t = null достаточно для одноразового таймера. Для периодического таймера надо ещё и PauseTimer(t). Quote (FatalBlade) Как удаляется юнит? Надо сначала call RemoveUnit(unit) а потом set unit=null, или наоборот? И если unit это всего лишь временный указатель на юнита, то хватает set unit=null, не? Не надо же потом писать call RemoveUnit(unit)? Если ты хочешь вообще избавиться от юнита, то надо сделать RemoveUnit. А обнулять надо всегда. Quote (FatalBlade) Что бы удалить точку, хватает call RemoveLocation(p), или потом надо написать set p=null? RemoveLocation тоже надо. Quote (FatalBlade) Что бы окончательно удалить группу, надо сначала удалить из неё всех юнитов с помощью call GroupRemoveUnit(g, u)? Или этого делать не обязательно?... Дальше, call DestroyGroup(g), а потом set g=null? Или наоборот, или обнулять не обязательно GroupClear, DestroyGroup и обнуление. Quote (FatalBlade) Хватает ли call DestroyEffect(e), чтобы избавиться от самой страшной утечки в джассе, или же потом надо переменную обнулить - set e=null Нужно и обнуление и уничтожение. Почему нужно обнулять, читай тут.
|
|
|
|
Ty3uK | Дата: Суббота, 24 Сентября 2011, 06:53:13 | Сообщение # 3 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Все это- объекты. Их надо обнулить, иначе будут висеть в памяти
|
|
|
|
FatalBlade | Дата: Суббота, 24 Сентября 2011, 09:13:11 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Короче, для всех Handle'ов сначала Remove/Destroy а потом обнуление. Типа сначала уничтожается обьект а потом ссыла на него. Так?
Quote (|DUОS|) В зависимости от того, какой таймер. DestroyTimer(t) и set t = null достаточно для одноразового таймера. Для периодического таймера надо ещё и PauseTimer(t). Зачем PauseTimer(t)? Типа остановить его? У меня уже есть триггер с периодическим локальным таймером, и я не делал PauseTimer(t), и всё работает как надо. И даже если всё равно надо, значит сначала PauseTimer(t), потом DestroyTimer(t), потом t=null?
|
|
|
|
Ty3uK | Дата: Суббота, 24 Сентября 2011, 09:31:32 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Переодический таймер всегда надо паузить, это раз. Два- не юзай remove на хэндлы- ссылка остается все равно, юзай FlushChildHashtable()
|
|
|
|
SirNikolas | Дата: Суббота, 24 Сентября 2011, 11:35:20 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| FatalBlade, рассуждай логически. Если ты сначала обнулишь переменную, то в Destroy... пойдет значение null, а не то, что нужно было уничтожить.Quote (FatalBlade) сначала PauseTimer(t), потом DestroyTimer(t), потом t=null? Да. Говорят, лучше сначала запаузить периодический таймер. Ty3uK, не сбивай. Remove'ать надо, а ты сказал функцию для очищения хэш-таблицы.
|
|
|
|
Ty3uK | Дата: Суббота, 24 Сентября 2011, 12:08:29 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Так он про хэндл сказал- я и ответил, что ремув ячейки оставляет ссылку в памяти. Пускай тогда говорит яснее, а то хэндл- это из хэш таблицы
|
|
|
|
FatalBlade | Дата: Суббота, 24 Сентября 2011, 12:17:00 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Ок а ведь null, разве не является тоже каким то присвоением? Так же как 0 это тоже число
|
|
|
|
lawson | Дата: Суббота, 24 Сентября 2011, 12:21:10 | Сообщение # 9 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) Ок а ведь null, разве не является тоже каким то присвоением? Да null это присвоение значения пусто.
Добавлено (24 Сентябрь 2011, 12:21:10) --------------------------------------------- ХМм чета с вопросами fatalblade раздел гуи\жасс оживился.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 24 Сентября 2011, 12:21:23 |
|
|
|
[DUОS] | Дата: Суббота, 24 Сентября 2011, 12:34:04 | Сообщение # 10 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (lawson) с вопросами fatalblade раздел гуи\жасс оживился. lawson, Фаталка и нас оживил
|
|
|
|
FatalBlade | Дата: Суббота, 24 Сентября 2011, 12:35:07 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) ХМм чета с вопросами fatalblade раздел гуи\жасс оживился. Это ещё не всё) Будут ещё))
|
|
|
|
[DUОS] | Дата: Суббота, 24 Сентября 2011, 12:37:20 | Сообщение # 12 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (FatalBlade) Будут ещё)) Окей)
|
|
|
|
Ty3uK | Дата: Суббота, 24 Сентября 2011, 12:38:54 | Сообщение # 13 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Норм, это даже начинает правится Добавлено (24 Сентябрь 2011, 12:38:54) --------------------------------------------- Омг... Телефон. Нравиться*
|
|
|
|
lawson | Дата: Суббота, 24 Сентября 2011, 12:39:28 | Сообщение # 14 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) Омг... Телефон. Нравиться* Нажимай кнопку ПРАВКА чтобы исправить предыдущий пост.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 24 Сентября 2011, 12:39:36 |
|
|
|
Ty3uK | Дата: Суббота, 24 Сентября 2011, 12:41:05 | Сообщение # 15 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Пда шаблон укоза не позволяет это делать, а денежки жалко, чтобы лазить на полном оформлении
|
|
|
|
[DUОS] | Дата: Суббота, 24 Сентября 2011, 12:43:46 | Сообщение # 16 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (Ty3uK) Пда шаблон укоза не позволяет это делать Здесь - нет.
|
|
|
|
Ty3uK | Дата: Суббота, 24 Сентября 2011, 12:44:58 | Сообщение # 17 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Да, шаблон стандартный, поэтому такой функции нет
|
|
|
|
FatalBlade | Дата: Воскресенье, 25 Сентября 2011, 21:27:04 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (|DUОS|) Фаталка и нас оживил Так не умирайте же, отвечайте на все мои вопросы Добавлено (25 Сентябрь 2011, 21:27:04) --------------------------------------------- Если я триггерно убиваю юнита - call KillUnit(unit), он ведь потом сам удалится из памяти, не?
|
|
|
|
Ty3uK | Дата: Воскресенье, 25 Сентября 2011, 21:39:17 | Сообщение # 19 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Нет, ты же его убиваешь, а не удаляешь
|
|
|
|
FatalBlade | Дата: Воскресенье, 25 Сентября 2011, 21:43:19 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Но ведь когда юниты умирают (не триггерно), их же не надо потом триггерно удалять?
|
|
|
|
lawson | Дата: Воскресенье, 25 Сентября 2011, 21:46:40 | Сообщение # 21 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Нет когда они умирают не тригерно, так как их не поймаешь если на них нет ссылки.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 25 Сентября 2011, 21:48:44 |
|
|
|
SirNikolas | Дата: Понедельник, 26 Сентября 2011, 12:16:04 | Сообщение # 22 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) Если я триггерно убиваю юнита - call KillUnit(unit), - он ведь потом сам удалится из памяти, не? Удалится, если на него не будет ссылаться ни одна переменная (ни локальная, ни глобальная). Вернее, удалится после разложения костей (посмотри время в константах).
|
|
|
|