Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как правильно выгружать мувики из памяти?(garbage colection) для player9 (http://www.flasher.ru/forum/showthread.php?t=156616)

webliska 24.05.2011 19:28

как правильно выгружать мувики из памяти?(garbage colection) для player9
 
столкнулся с проблемой что память освобождается не вся при использовании плеера9(System.gc() и unloadAndStop нету к сожалению)

пример кода (b1 b2 -кнопки на сцене, сont- контейнер свф)

Код AS3:

import flash.events.Event;
import flash.display.Loader;
b1.addEventListener(MouseEvent.CLICK,loadswf);
b2.addEventListener(MouseEvent.CLICK,unloadswf);
var swfContent;
var myloader:Loader;
function loadswf(e:MouseEvent) {
        var myrequest:URLRequest = new URLRequest("external.swf");
        myloader= new Loader();
        myloader.load(myrequest);
        myloader.contentLoaderInfo.addEventListener(Event. COMPLETE, addMovie,false,0,true);
}
 
function addMovie(e:Event) {
        myloader.contentLoaderInfo.removeEventListener(Event. COMPLETE, addMovie);
        swfContent = e.target.content;
          cont.addChild(swfContent);
}
function unloadswf(e:MouseEvent) {
        myloader.unload();
        cont.removeChild(swfContent)
        myloader=null;
        while( swfContent.numChildren > 0 ){
                swfContent[swfContent.getChildAt( 0 )] = null;
                swfContent.removeChildAt( 0 );
        }
 
        swfContent= null;
        //GC hack
        try {
                        new LocalConnection().connect('foo');
                        new LocalConnection().connect('foo');
        } catch (e:*) {}
}

какие будут советы?

alatar 24.05.2011 20:11

Цитата:

System.gc() и unloadAndStop нету к сожалению
С чего вы взяли, что нет System.gc()? Он как раз в девятой (9.0.115.0) и появился. Другое дело, что этот метод работает только в дебаге.
Цитата:

какие будут советы?
1. Убедиться, что в загружаемой флешке закрыты все потоки, остановлены таймеры, удалены слушатели.
2. Сначала занулить внешние ссылки, а потом уже unload.
3. Не использовать хаки.

webliska 24.05.2011 20:29

вот имеено что в загружаемой флешке нет никаких листенеров и потоков.(несколько анимированых мувиклипов)
открываю process explorer. смотрю использование памяти при загрузке занялось 25 мб. при выгрузке ушло только примерно половина.(при просмотре Commit Charge)
а как выгрузить остальное без использования хаков? Желательно поправьте код unloadSwf если что не так, на пальцах смотриться намного эффективнее.

alatar 24.05.2011 22:32

Если объект не может выгрузиться, хаки не помогут. process explorer не показатель, используйте профайлер для обнаружения утечек памяти.

dimarik 24.05.2011 22:57

Цитата:

Сообщение от alatar (Сообщение 998410)
2. Сначала занулить внешние ссылки

Чуть подробнее можно? Внешние по отношению к внутренним? )

alatar 24.05.2011 23:01

Внешние на контент лоадера. )

dimarik 24.05.2011 23:07

А если контент лоадера рассредоточился по дисплей-листу в произвольных кустах, не принадлежащих лоадеру?

alatar 24.05.2011 23:11

Хочешь сказать, что это не помешает его выгрузить?

dimarik 24.05.2011 23:20

А Вы попробуйте )

hazan 25.05.2011 01:42

в фп9 есть баг с garbage collection - имеются мемори ликс.
писать для ФП10
использовать .unloadAndStop();

профайлер кст использование памяти показывает неверно. нужно использовать именно task manager.

alatar 25.05.2011 11:30

Цитата:

в фп9 есть баг с garbage collection - имеются мемори ликс.
Баги есть в каждой версии, какой именно вы имеете ввиду?
Цитата:

профайлер кст использование памяти показывает неверно. нужно использовать именно task manager.
task manager показывает потребление памяти для всех флешек в пределах браузера, в отличие от профайлера. И какой из доступных профайлеров вы имеете ввиду?

webliska 25.05.2011 13:30

Цитата:

Если объект не может выгрузиться, хаки не помогут
Если возможно правильный пример кода выгрузки свф.где нету листенеров и нету обращения к контенту. В загружаемой флешке несколько анимированых мувиклипов и несколько шейпов(Shape). Для плеера9.
У меня и в приведенном коде выгружается неполностью.


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

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