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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

Регистрация: Oct 2007
Сообщений: 78
По умолчанию утечка памяти - решение проблемы

Товариши!
предлагаю собрать здесь все необходимые действия для того, чтобы объект мог быть удален GC.

Например сейчас сделал перемещение предметов в слотах у пользователя в инвентаре.
При перемещении используется метод BitmapData.clone(), и BitmapData.dispose(); Так же делаются эллементарые действия removeChild, displObj(DisplayObject) = null, removeEventListener, classObj(Объект класса).Destroy()(в дестрое делаются все действия чтобы объект мог удалить gc);

Но этого как я заметил вовсе недостаточно.
Давайте соберем все необходимые действия!
Начну:
Чтобы объект стал доступным для удаления с помощью GC необходимо:
1. если он является child'ом другого объекта нужно методом removeChild(At)() удалить его из списка child'ов.
2. удалить все листенеры этого объекта с помощью removeEventListener.
3. если есть какие то BitmapData которые надо удалить, то использовать метод BitmapData.dispose();
3. необходимо чтобы на объект небыло внешних ссылок, для этого нужно все внешние ссылки приравнять к null.
4. Если объект является объектом вашего класса, то необходимо удалить все внутренние объекты как описано в пунктах 1,2,3. Для этого можно завести отдельный метод Destroy(), где и будет осуществляться зачистка.
5. Для верности приравнять ваш объект к null.

Внимание! Список не полный!

Старый 16.12.2008, 18:37
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А зачем битмап клонировать постоянно, когда можно использовать один и тот же для отображения?

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

Регистрация: Nov 2005
Сообщений: 1,155
Жаль что нет принудительной очистки памяти - контролировать все ссылки бывает жутко трудно.

Старый 16.12.2008, 19:26
kia007 вне форума Посмотреть профиль Отправить личное сообщение для kia007 Найти все сообщения от kia007
  № 4  
Ответить с цитированием
kia007

Регистрация: Oct 2007
Сообщений: 78
а клонировать, потому что в нескольких слотах могут быть одинаковые предметы с одинаковыми картинками.

Цитата:
Жаль что нет принудительной очистки памяти - контролировать все ссылки бывает жутко трудно.
Ну помоему это везде надо контролировать c#, c++(поправьте меня если нет). Ведь если есть ссылка на объект значит это предполагает что ты используешь этот объект в каких то целях.
А вот то что нет в AS методов, которые помогли бы в решении проблемы утечки памяти это не есть гут. например нет деструктора..т.е. приходится самому вызывать свои методы очистки. А так бы написал delete obj и все в поряде

Кстати решил проблему утечки памяти, связана как обычно с невниманием.
А GC помоему достаточно оптимально работает,т.е.
для каждого момента флэшки определятся пик памяти если вдруг текущая память увеличивается до пика вызывается GC, если вдруг текущая память привышает пик, то пик увеличивается до нового значения и опять зачистка...

Старый 16.12.2008, 19:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от kia007 Посмотреть сообщение
а клонировать, потому что в нескольких слотах могут быть одинаковые предметы с одинаковыми картинками.
И что? Bitmap-ов может быть сколько угодно, а BitmapData — одна на всех.

Старый 16.12.2008, 20:24
kia007 вне форума Посмотреть профиль Отправить личное сообщение для kia007 Найти все сообщения от kia007
  № 6  
Ответить с цитированием
kia007

Регистрация: Oct 2007
Сообщений: 78
Цитата:
И что? Bitmap-ов может быть сколько угодно, а BitmapData — одна на всех.
Да, реально нет смысла клонировать, спасибо!

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

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

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


 


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


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