Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.07.2016, 00:35
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 1  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
По умолчанию Утечка памяти.

Кто-нибудь дайте ссылку на понятную статью по данной теме. Все что я читал как-то абстрактно и остается много вопросов. Либо расскажите здесь своими словами, но не надо пересказывать академические матриалы. простым языком, чтоб даже школьник понял, ну просто иногда чувствую себя школьником.

История такая, решил побаловаться со стрелялкой для сына, и процесс затянулся то федя слетает ни с того ни с сего, то другой гемор. короче сейчас обнаружил утечку памяти, через 10-20 минут игры плеер жует уже почти 500 метров при этом фпс естественно падает. Перечитал кучу всего и пока только теория своя появилась, мне что каждый элемент слушать на предмет удаления родителя и удалять все самому?

У меня пока такая иерархия.
1 - описывается самый простейшая деталь (картинка, событие, вспомогательные фишки)
2- из мелких собирается родитель боле сложный и так далее (чтоб не писать кучу текста в одном файле)
3 - из более сложных собираю потому же принципу еще более сложные пока не добьюсь окончательного результата.

так вот после прочитанного вертится мысль, что необходимо слушать каждый более сложный элемент на предмет его удаления и в нем же удалять всех его детей? верно ли я усвоил материал или нет?
к примеру:
простой элемент который заранее подгоняется к минимум требований что-то вроде класса где описывается поведение textfield, чтобы выводить какой-нибудь текст. просто описание поведения без слежки удаления. собственно сам экземпляр класса потом не удаляется

после создаю к примеру табло с надписями собранное из выше описанного класса.
и в конце вывожу все это дело на экран.

Так вот насколько я понял если я удалю табло, то все его дети останутся, то есть если я удаляю табло то все textfield`ы останутся в памяти? или же они удаляться вслед за родителем (визуально естественно удаляются), но ощущение что они остаются в памяти. В общем подучите неуча пожалуйста.

Старый 18.07.2016, 10:16
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 2  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
пока хоть что-то ссылается на объекты, они останутся

Старый 18.07.2016, 10:35
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Если сложный элемент использует внешние подписки, например прослушивает stage, то для его удаления, понадобиться отписаться от внешних диспетчеров, так-как ссылка на него хранится в диспетчере.
__________________
Дети не должны знать о своих родителях

Старый 18.07.2016, 21:01
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 4  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
это я уже давно усвоил еще когда только начинал осваивать as3. просто пока до сих пор не могу понять как же все таки правильно подчищать память, чтоб при удалении обьекта от него не оставалось ни одного бита (байта, собственно кому как нравиться).
Вот к примеру текущий проект добавляются корабли. Добавляются инамически, я при определенных условиях задал чтобы они удалялись, то есть не важно были ли они уничтожены или просто вышли за пределы поля (такая логика)) корабли добавляются динамиски, при выполнении условий они удаляются, а при добавлении проходят через массив, который при удалении какого-либо корабля, удаляет ЭТОТ корабль из самого массива, то есть по сути удаляется последняя ссылка на этот экземпляр, потом что все другие также чистятся. вот вертиться мысль что в корабле вероятно не все учтено к удалению. к примеру может быть какой-то параметр практически не имеющий отношения к самому кораблю зависает в памяти. вот этого я пока понять не могу.
Сегодня утром отредактировал весь проект и почистил даже числовые и строковые переменные на всем этапе сборки готового экземпляра, но по прежнему наблюдаю увеличение занимаемой памяти, хотя в меньшей степени. вот собственно это и беспокоит то есть на данный момент критическая утечка наблюдается уже не через 10-20 минут а около 30 минут после запуска.

Старый 18.07.2016, 21:17
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Ну код всё равно никто не видит, но задумайтесь о пулах - это простое, удобное и производительное решение, которое прекрасно защищает от утечек памяти

Старый 18.07.2016, 23:52
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 6  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
PsychoTech,
Самое лучшее решение - это задействовать дебаггер и в рантайме периодически останавливать выполнение (Breakpoint), смотреть содержимое всех интересующих внутренностей, содержимое массивов и т.д. Если вы ещё не используете, то обязательно научитесь.
__________________
Дети не должны знать о своих родителях

Старый 19.07.2016, 23:01
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 7  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Сам не пробовал такой подход, но может сработать. Нужно создать new Dictionary(true) - словарь со слабыми ссылками на ключи. Пихаете в него все создаваемые инстансы. Также нужна возможность ручного запуска сборщика мусора (flash.system.System.gc() в дебагере или любые методы форсирования сборки в релизом плеере).
Если идея верна, то:
* дожидаемся подозрительно тяжелого состояния;
* приглашаем сборщик мусора;
* делаем несколько дыхательных упражнений, чтобы не терять время, пока сборщик работает;
* мониторим содержимое словаря.
А по хорошему, брейкпоинты и профайлеры - наше все!

Старый 20.07.2016, 17:03
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Идея верна. У нас получалось зафиксировать факт удаления из Dictionary после двух последовательных вызовов System.gc() через кадр. Я обычно пользуюсь Adobe Scout. Жамкаешь на его кнопку gc пару-тройку раз. Запускаешь что-нибудь тяжелое, что должно будет выгрузиться в момент X. Ждешь или искусственно его достигаешь. Жамкаешь снова на gc несколько раз. Потом смотрим что не выгрузилось между двумя вызовами в меню Memory Allocation. Идем в листинг виноватого класса и тупо видим, что виновата обычно забытая отписка от модели.
В особо упоротых случаях я включаю профайлер Flash Builder. Он тупо показывает GCRoot этого пациента. Но этот профайлер жрет много памяти и времени и падает на пустяках.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.