Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как правильно очистить (удалить) массив с битмапными данными. (http://www.flasher.ru/forum/showthread.php?t=153166)

mooncar 29.03.2011 21:02

Как правильно очистить (удалить) массив с битмапными данными.
 
Есть некая функция для управления слайд-шоу.

Допустим, в процессе ее работы создается массив (не как локальная переменная, а в области видимости _root), в него заносятся битмапные данные из библиотеки.
Используются (аттачатся куда нужно и т. д.).
Функция отрабатывается снова.
Создаю массив с тем же именем, понятно, что он опять будет пустым и опять готовым к заполнению битмапой.

Вопрос. А нужно ли было освобождать память от старой битмапы? Наверное, недостаточно было просто создать новый массив с тем же именем?
К сожалению, для экспериментирования недостаточно времени, а теория у меня прихрамывает.

Hauts 29.03.2011 21:06

Нужно, если на старую битмапу есть ссылки. Если нет — смело создаем новый массив ("затирая" предыдущий).

По-идее сборщик мусора должен отработать и очистить память. Как дела обстоят в реальности — не понятно :) Ну а вообще можно Ctrl + Shift + Enter и смотреть, что есть в памяти, а чего нет.

Если уж совсем задаться целью, то можно перед созданием нового массива пробежаться по элементам и dispose для каждого. Потом обнулить ссылки и уже после этого создавать новый массив.

А вообще странно, зачем нужен dispose для битмапы, если ссылку на нее можно просто переназначить на другую битмапдату (соответственно сделать первую битмапу "клиентом" для мусорщика). Как пишут в хэлпе — чтобы освободить память.

Цитата:

Frees memory that is used to store the BitmapData object
Чуть позже попробую потестировать как-нибудь. mooncar, отличная тема.

mooncar 29.03.2011 21:10

К сожалению, в работе функции используется сторонний большой класс, и могут ли там остаться ссылки на битмапу, или нет, незвестно, а в детали его работы вникнуть не успею.
Попробую ограничиться обязательным dispose для всех элементов массива.

Добавлено через 3 минуты
Цитата:

Сообщение от Hauts (Сообщение 984826)
А вообще странно, зачем нужен dispose для битмапы, если ссылку на нее можно просто переназначить на другую битмапдату

Даже если и так, то в моем случае количество элементов может быть разным от одного использования до другого. Поэтому не все ссылки переназначатся.

В общем, вопрос остался для меня пока открытым.

alexcon314 30.03.2011 08:22

dispose() работает хорошо, память освобождается четко, тем более, я так понял, у вас никаких проблем с ее использованием в коде не возникает, в чем тогда проблема? Используйте, конечно. Ее для того и сделали. Заметьте, dispose() нет, скажем, у массива. Это я к тому, что случай с битмапдатой несколько отличен от остальных.
Просто переназначить ссылку не тру. Особенно, если "количество элементов может быть разным от одного использования до другого".


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

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