![]() |
Как очистить память при работе с массивом MovieClip'ов?
Как очистить память при работе с массивом MovieClip'ов? Что нужно сделать, чтобы при подгрузке очередного MovieClip'а предыдущий выгружался из памяти? Сейчас, пока я не переберу все элементы массива, отжирается память. Хотелось бы ее освобождать как-то.
А сама схема такая: есть спрайт на слое под кнопками, я в этот спрайт с помощью addChild и removeChild подсовываю MovieClip'ы из массива (нажатии кнопок nextVideo и prevVideo). |
Пока живы ссылки на объекты - они не будут подмяты GC. Поэтому нужно обnullить элементы массива.
|
КорДум
Как так "обnullить"... :) Мне нужно подгрузить из массива MovieClip, проиграть его, сменить на другой MovieClip из массива, очистить память. Ну и т.д. Мне не нужно убивать массив. Мне не нравится что массив полностью в памяти висит, а не только тот MovieClip, что проигрывается в данный момент времени. Например, я запускаю первый элемент массива, в этот момент времени в памяти только он, и ему не нужны остальные элементы. Зачем мне при проигрывании второго элемента удерживать в памяти первый? Наверняка его можно как-то выгрузить... Добавлено через 9 минут [add] И второй вопрос - почему при загрузке MovieClip'а памяти отжирается в десятки раз больше чем он весит? Видео из MovieClip'а весит 7 метров, а при подгрузке MovieClip'а отжирается около 200 метров. Если бы отжиралось 7 метров, я бы про память не спрашивал ;) |
Обnullить вот так: arr[5] = null. Тогда ссылка на мувиклип пропадет, клип будет доступен сборке мусора. В вашей ситуации, когда нужно постоянно менять клипы и они не одноразовые, лучше каждый раз создавать новый экземпляр класса Mc1, Mc2, ..., McN, перед этим удалять все ссылки на клип предыдущий. Это как я бы сделал.
А, или сделать вот так: Код AS3:
Код AS3:
|
Так и не придумал, где (точнее как...) мне в такой схеме прикрутить null:
Код AS3:
|
Вам обнулять даже ничего не надо - переменная-ссылка на объект сама отмирает сразу же, как отработает метод. И опять повторюсь, что классы пишутся с большой буквы. Я вот сразу не понял, что находится у вас в массиве, пока не дочитал до конца.
|
КорДум
Судя по тому, что мне показывает ProcessExplorer, память не возвращается, так и остается занятой. Пока я не переберу все клипы память отжирается. Как только я иду на второй круг, память больше не занимается. А почему переменная-ссылка на объект должна обнулиться? Здесь?: Код AS3:
|
Сейчас я воспроизведу ситуацию и гляну через профайлер.
|
Цитата:
Если на мувиклип более нет никаких ссылок - значит к нему никак не обратиться - забываем про мувиклип. ЗЫ Если Вы смотрите через диспетчер задач - не верьте ему =) |
В общем ясно. Объекты лежат в "корзине" и ждут, когда сборщик мусора решит, что эту корзину следует почистить. Грубо говоря, эти клипы не занимают много памяти, чтобы привлечь внимание сборщика мусора. Где-то здесь была тема про его работу.
|
| Часовой пояс GMT +4, время: 20:32. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.