Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   утечка памяти - решение проблемы (http://www.flasher.ru/forum/showthread.php?t=119268)

kia007 16.12.2008 17:03

утечка памяти - решение проблемы
 
Товариши!
предлагаю собрать здесь все необходимые действия для того, чтобы объект мог быть удален 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.

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

etc 16.12.2008 18:37

А зачем битмап клонировать постоянно, когда можно использовать один и тот же для отображения?

flash33 16.12.2008 18:44

Жаль что нет принудительной очистки памяти - контролировать все ссылки бывает жутко трудно.

kia007 16.12.2008 19:26

а клонировать, потому что в нескольких слотах могут быть одинаковые предметы с одинаковыми картинками.

Цитата:

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

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

etc 16.12.2008 19:39

Цитата:

Сообщение от kia007 (Сообщение 784223)
а клонировать, потому что в нескольких слотах могут быть одинаковые предметы с одинаковыми картинками.

И что? Bitmap-ов может быть сколько угодно, а BitmapData — одна на всех.

kia007 16.12.2008 20:24

Цитата:

И что? Bitmap-ов может быть сколько угодно, а BitmapData — одна на всех.
Да, реально нет смысла клонировать, спасибо!:)


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

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