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

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

Ответ
 
0pJl9lTa

offline
Опыт: 3,397
Активность:
Ышо раз об утечках
Скопился ряд вопросов об утечках.
1)
Код:
call TriggerRegisterUnitEvent( tr, I2U(GetStoredInteger(udg_Cashe, I2S(H2I(tr)), "unit")), EVENT_UNIT_SPELL_CAST )

то что выделено - утечка? Т.е. эта строка удаляеца кода мы очищаем кеш с даным ключом?

2) PolledWait - утечка? :-O
3) call DisplayTimedTextToForce( GetPlayersAll(), 10, "blablabla" )
Строка удалиться как нибудь? Автоматически? Или можно самому?

Фсёкажись.
Старый 16.05.2006, 15:21
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
0pJl9lTa:
1) в принципе должна но с КЕШем есть свои глюки т.е. иногда не удаляеться или удаляеться но не то =)
2)Утечка ! потому что у него таймер не обнуляеться : ) и тем более чем он лучше от СлеепЕкшна если он ним всеровно пользуеться, нет ну в принципе его(ПолледВеит) можно использовать но прямыми руками можно сделать лучше !
3) вот что ето делает
Цитата:
function DisplayTimedTextToForce takes force toForce, real duration, string message returns nothing
if (IsPlayerInForce(GetLocalPlayer(), toForce)) then
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, duration, message)
endif
endfunction
хотя я думаю что ты и сам ето знаешь. В принципе мне кажеться что сама
native DisplayTimedTextToPlayer удаляет строку по истечении времени.
Старый 16.05.2006, 17:29
0pJl9lTa

offline
Опыт: 3,397
Активность:
MrSmiLe
2 - Ок
1 - Глюков с кешем у мну нет, а вот насчет строки интересно...
3 - ПО моему со строками существует масса утечек... хотелось бы все таки услышать четкий ответ человека который уверен на 100%.
Старый 16.05.2006, 18:41
Celebrate

offline
Опыт: 849
Активность:
0pJl9lTa если верить Какодемону, то вот это: I2S(H2I(tr)) - утечка. В его статье про РБ было про написано про стринги.
Вряд ли здесь она есть. Может БРу когда-нибудь заработает.
Старый 16.05.2006, 23:02
0pJl9lTa

offline
Опыт: 3,397
Активность:
Celebrate но тогда рб+кеш сам по себе одна большая мега утечка, конечно если юзать его во всем во всем, начиная от спелов, и заканчивая спавном моснтров. жуть.
Старый 17.05.2006, 07:28
NETRAT

offline
Опыт: 83,712
Активность:
Чем использовать PolledWait, лучше удавиться.
TriggerSleepAction - вот НАШ выбор! =)
Строки это вообще утечки - ибо строка - это фактически, обьект, у которого есть конструктор, но от них избавиться нельзя
Хотя, на самом деле это намного более меньшее зло, чем, скажем, неудаленная группа. На самом деле нет смысла так кропотливо копаться над каждой утечкой, ибо это того не стоит. Впринципе это то же самое что и сделать ЭВМ, элементы которого будут работать без задержек, или хотя бы, с дискретными задержками - это сказка, поэтому люди пошли другим путем - громадные надстройки над схемами, которые синхронизовали ее элементы...
Старый 17.05.2006, 11:07
Celebrate

offline
Опыт: 849
Активность:
0pJl9lTa а ты думал почему Какодемон так на него ругается? :)
Просто эта утечка не критична; тем более, если строка один раз создастся, то второй раз точно такую же строку вар не создаст (по статье Какодемона; сам не проверял; саму статью я выложить не могу, тк её нельзя публиковать без разрешения автора).
Старый 17.05.2006, 11:52
0pJl9lTa

offline
Опыт: 3,397
Активность:
Celebrate и NETRAT т.е. чем короче строчки, и больше повторений - тем меньше утечек так?
А с этим I2S(H2I(tr)) что?
Старый 17.05.2006, 13:21
NETRAT

offline
Опыт: 83,712
Активность:
0pJl9lTa ну на счет повторений мне ничего не известно, длинна строки мало влияет на количество утечек, зато, возможно влияет на размер утечки
А что не так с I2S(H2I(tr)) ?

NETRAT добавил:
Взял указатель на tr, преобразовал его тип к указателю на строку...
Старый 17.05.2006, 13:39
0pJl9lTa

offline
Опыт: 3,397
Активность:
От целебрейта
Цитата:
0pJl9lTa если верить Какодемону, то вот это: I2S(H2I(tr)) - утечка.
Старый 17.05.2006, 14:08
zibada

offline
Опыт: отключен
любая хоть однажды заюзанная строка попадает в спец. таблицу строк, и удалить ее оттуда - невозможно.
(при действиях с ней просто создаются новые строки)
зато нет повторов строк.
так что, это может и утечка, если разных строк используется слишком уж дофига, но не помню, чтобы это когда-то было первоочередной проблемой.
т.е. если в большом цикле создавать новые строки - это плохо (но не представить, кому это может быть надо), если же делать что-то типа I2S(H2I()), получая уже имеющиеся строки, это незначительно.
сделать с этим ничего нельзя.
Старый 17.05.2006, 15:29
Toadcop

offline
Опыт: 54,313
Активность:
DimonT - видно что Хардкор ;) вот я по подробней опишу "МиФ Утечки" - это так ламеров пугают ;) если что не понятно спрашивайте !!!



это уже есть на форуме но не для всех доступно...
Вот и я дошол к про что я писал в начале ! т.е. как надо правильно обнулять !
1. Обнулять надо только локальные переменые handle типа !(но даже и не все !) т.е. code,boolexpr,conditionfunc,filterfunc и т.п. типы которые не удаляютьса НЕ ИМЕЕТ смысла удалять они если были раз инциализированы то потом используютьса заново (как строки). как писал и на это надо было обратить только локальные переменые т.е. аргументы функии
не надо обнулять какой бы он не был ! кстати этим можно пользоватьса ! я в ТРС возвращяю юнита снаряда через "берущего" юнита т.е. есть обнуления лок. переменой а перед этим занчения этого югита передал аргументу . И я думаю что глобальные тоже не надо... ну вот, а для чего мы вообще обнуляем ? есть много версий но кто точно знает ? Я
короче где то месяц тому назад я сильно напряг этот вопрос и очень много тестил... и вышел гибридный результат этих "версий" т.е. обнулять надо для того что бы после удаления этого объекта вар смог выдилить на адрес этого объекта еще раз какой нибудь объект ! т.е. адресс юнита = 159785 если мы будет переодическим триггером создовать а потом пред следущим создание
удалять этого юнита (+обнулять если он фексируетьса в локальной переменой) то следущий созданый юнит будет иметь этот же адрес (это так называемо в "тепличных" условиях т.е. кроме этой функции на карте больше ничего нету !) а если мы не будем обнулять (если юнит в локальной перемной) после удаления то вар будет выделять другой адрес ! причем просто так утечки памяти минимальные за
напр. за 1000 таймеров 8кб. памяти ! простой один юнит занимает около 10 а то и больше ! а это 1000 таймеров ! т.е. "теперь дорогие детишки обратите внимание !" ("Nun liebe Kinder gebt fein Acht") здесь не идёт упор в эти несчясные нескольео Кб. нет здесь происходит величайшая манипуляция в истории человечества ! т.е. подумайте что нам даёт каждый раз новые адреса ?
А ? "Я вас не понимаю !" ("Ich verstehe euch nicht !") да ! да ! КЕШ усираетьса так как мы для него используем переведёные адреса (+ еще строками засираем ) для записаи объектов ! а записи в кеше не так и мало жрут ! вот теперь поняли весь хитрый механизм ! (это мне всё Рамми подсказали :yes: угу !) т.е. если не использовать кеш всё стает мене проблематично на счёт этих обнулений хотя тоже желательно обнулять...

Toadcop добавил:
Цитата:
если верить Какодемону, то вот это: I2S(H2I(tr)) - утечка
- когда Какос это писал он был под кайфом ! ну и что понятно мы поиммем новую (но не обязательно) строку и всё ! сама запись в кеше ест память ! короче читать выше !!!
Старый 17.05.2006, 17:06
NETRAT

offline
Опыт: 83,712
Активность:
Гм, обнулять следует указатели на обьекты для которых применялся метод Create - типа CreateGroup, CreateRect, CreateBoolExpr и др. - вроде бы так
Старый 17.05.2006, 23:21
Celebrate

offline
Опыт: 849
Активность:
NETRAT и ещё те, которые были удалены.
Старый 17.05.2006, 23:25
NETRAT

offline
Опыт: 83,712
Активность:
Не совсем понял - как обьект может быть удален если он не был создан :?
Старый 17.05.2006, 23:31
remal
нечто
offline
Опыт: 2,087
Активность:
Toadcop,
Цитата:
Рамми
???
Старый 18.05.2006, 00:02
Podk

offline
Опыт: 420
Активность:
Цитата:
Toadcop,
Цитата:
Рамми

???
Мб Rammstein?
Старый 18.05.2006, 16:13
Celebrate

offline
Опыт: 849
Активность:
NETRAT ну например если он был создан в одной функции, и используется в другой. Например, ты создал таймер, и когда он истечёт он самоуничтожится. Обнулять таймер надо в обоих функциях.
Я тестил по РБ-ссылкам.
Старый 18.05.2006, 16:33
Toadcop

offline
Опыт: 54,313
Активность:
Celebrate ты прав ;) ! ну короче да надо тестить по РБ ссылках если они "рециркулируютьса" то это хорошо =) т.е. типа утечек нету ! но конечно нельзя так критично подходить если там разница будет в 100 (адресс) ну короче. изучайте и поймёте ;) !
Старый 21.05.2006, 14:12
Ответ

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

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

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

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



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