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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.03.2009, 11:09
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 21  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
s8000_1, мдя ... ни какой ГЦ не имеет отношения ни к какой событийной модели, и уж тем болие к её баблингу. Ваш пример не связывает больше 3х кусочков различных частей приложения, поэтому поймать тут, что-то типа утечки будет сложно... но если вдруг получится так, что Вам придётся передать хотя бы на одного ребёнка Test ссылку, вся ваша конструкция целиком повиснет в памяти после удаления, а не только тот несчастный ребёнок. и так как Денис разрабатывает приложение состоящие не из 2х классов, что-то мне подсказывает, что он не раз встречался с ситуацией, что случайно не убитый слушатель тянет за собой, целую ветку своих родителей, которые в свою очередь тянут за собой своих детей.

Старый 12.03.2009, 12:07
2K WebStudio вне форума Посмотреть профиль Отправить личное сообщение для 2K WebStudio Посетить домашнюю страницу 2K WebStudio Найти все сообщения от 2K WebStudio
  № 22  
Ответить с цитированием
2K WebStudio
 
Аватар для 2K WebStudio

Регистрация: Jul 2002
Адрес: Russia Federation Moscow
Сообщений: 779
Отправить сообщение для 2K WebStudio с помощью ICQ
интересное обсуждение.
должен заметить, что в Муке ничего про удаление слушателей как и детей нет. Точнее там просто не затрагивается тема удаления под детей в освобождении памяти.

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

Регистрация: Jan 2009
Сообщений: 1,651
я пишу игрушки. На as3. Там постоянно создаются объекты, удаляются, эти объекты взаимодействуют с другими объектами, держат в себе ссылки на них. И постоянно ловлю утечки памяти. В больших MMO на флеш - и timeZero, и в Dofus, я тоже вижу, как с каждым часом клиент сжирает все больше и больше оперативы. Могу сказать уверенно, что GC во флеше очень неторопливый и совершенно тупой.

Так что в моих проектах зануление не лишнее. И не занимает больше места, чем сами классы, это уж точно. А когда я на заказ делаю какую-нибудь галерею - я даже не заморачиваюсь.

Старый 12.03.2009, 13:36
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 24  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Хотя ИМХО это банально перестраховка (см. пример для профайлера выше), ибо по-хорошему методы addChild и removeChild класса DisplayObject должны быть умными и удалять всех лишних слушателей из Event Flow автоматически.
То есть, если я не добавил объект на сцену, то и получить события от него не могу?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 12.03.2009, 14:54
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 25  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
Цитата:
Сообщение от BloodHouD
ни какой ГЦ не имеет отношения ни к какой событийной модели, и уж тем болие к её баблингу. Ваш пример не связывает больше 3х кусочков различных частей приложения, поэтому поймать тут, что-то типа утечки будет сложно... но если вдруг получится так, что Вам придётся передать хотя бы на одного ребёнка Test ссылку, вся ваша конструкция целиком повиснет в памяти после удаления, а не только тот несчастный ребёнок. и так как Денис разрабатывает приложение состоящие не из 2х классов, что-то мне подсказывает, что он не раз встречался с ситуацией, что случайно не убитый слушатель тянет за собой, целую ветку своих родителей, которые в свою очередь тянут за собой своих детей.
Да я не про GC и событийную модель. Я про то, что сама событийная модель тривиальна при отсутствии флэшовых фич и надо понять, как она работает. Я предположил, что из-за этих фич разные ссылки на объект и слушатель события создаются в родителях, родителях родителей и т. п. - из-за этого и надо удалять все вручную.

По поводу ссылок на ребенка Test - это логично, что вся конструкция повиснет в памяти, т. к. в самом этом ребенке есть ссылка на родителя. Но если делать объекты изолированными (взаимодействие с внешним миром через события и публичные функции самого объекта), то все будет удаляться нормально. Все равно ведь удаление детей и слушателей - перестраховка на случай что-то упустить.

iNils, лишние слушатели - это те, которые ловят событие не в target-фазе.
А если Вы не добавляете объект на сцену, эти слушатели не создадутся.


Последний раз редактировалось s8000_1; 12.03.2009 в 15:10.
Старый 12.03.2009, 15:40
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 26  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
s8000_1, как у Вас всё утопично ... в жизни бы так

Старый 12.03.2009, 15:47
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 27  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
BlooDHounD, но Вы разве не согласны, что ручное удаление - перестраховка или "правило хорошего тона", а не необходимость? И что EventDispatcher можно переписать самому и понять, кто где может создавать ссылки на слушателей и объекты, испускающие события.

Я сам-то лично удаляю слушателей и детей (их по возможности) на случай "вдруг забуду обнулить где-то внешнюю ссылку".

Старый 12.03.2009, 16:19
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 28  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
это необходимость. в команде разработчиков нельзя гарантировать, что второй разработчик соблюдёт все нюансы Вашей безалаберности.

Старый 12.03.2009, 16:40
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 29  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
столько разлагольствования, чтобы в итоге выяснить, что в большом проекте все занулять необходимо

Старый 12.03.2009, 18:08
2K WebStudio вне форума Посмотреть профиль Отправить личное сообщение для 2K WebStudio Посетить домашнюю страницу 2K WebStudio Найти все сообщения от 2K WebStudio
  № 30  
Ответить с цитированием
2K WebStudio
 
Аватар для 2K WebStudio

Регистрация: Jul 2002
Адрес: Russia Federation Moscow
Сообщений: 779
Отправить сообщение для 2K WebStudio с помощью ICQ
Цитата:
Сообщение от iflamberg Посмотреть сообщение
столько разлагольствования, чтобы в итоге выяснить, что в большом проекте все занулять необходимо
на самом деле, необходимо подчищать все. и вот это понятие "большой проект" оно совсем не так уж и далеко.
легко проверить тестовым путем, что надо чистить абсолютно все. в идеале каждый класс должен иметь некоторый метод destroy().
и etc прав - в правильно начатом проекте такой проблемы не возникнет, если каждый класс будет иметь свой метод очистки и вся иерархия будет построена так, что при удалении экземпляра класса родителя, удаляются все его детишки.

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

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

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


 


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


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