|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2008
Сообщений: 4
|
SWFLoader - как освободить используемую память
Среда разработки - Flex Builder 3.
Для последовательной демонстрации набра SWF файлов (20 -70 шт.) используется компонент SFWLoader (mx.controls.SWFLoader). Для загрузки нового файла используется Проблема заключается в том что при большом количестве загружаемых файлов занятой оказывается 70-80% системной памяти (например 1,5 - 1,8 Gb). Можно ли каким-то образом принудительно освободить память, выделяемую SWFLoader - ом? |
|
|||||
ветеран форума
|
присваивать сначала source = null не помогает?
__________________
4am is time to rock |
|
|||||
Регистрация: Mar 2008
Сообщений: 4
|
К сожалению, нет. Не помогает. Может быть у кого ни будь есть готовый работающий пример?
|
|
|||||
Назначить source = null и подождать, когда Garbage Collector грохнит ненужные объекты в памяти, не пробовали?
|
|
|||||
Регистрация: Mar 2008
Сообщений: 4
|
Вполне возможно, что я что то не понимаю, привожу простой пример, в котором не освобождается память - что нужно поправить?
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" width="460" height="200"> <mx:Script> <![CDATA[ import flash.events.* import flash.net.URLRequest; import mx.controls.SWFLoader; [Bindable] private var loaded:Boolean = false; private var myLoader:SWFLoader=new SWFLoader(); private function init():void{ myLoader.showBusyCursor = true; myLoader.x=10; myLoader.y=10; myLoader.width=196; myLoader.height=124; this.addChild(myLoader); mem.text=System.totalMemory.toString(); } private function loadButtonHandler(e:Event):void{ myLoader.load("demo.swf"); mem.text=System.totalMemory.toString(); } private function unloadButtonHandler(e:Event):void{ myLoader.source=null; System.gc(); mem.text=System.totalMemory.toString(); } ]]> </mx:Script> <mx:Button x="7" y="154" label="Load SWF" id="loadButton" click="{loadButtonHandler(event)}"/> <mx:Button x="359" y="154" label="Unload SWF" id="unloadButton" click="unloadButtonHandler(event)" /> <mx:Label x="236" y="114" text="Label" width="101" height="32" id="mem"/> </mx:Application> |
|
|||||
Вызывать Garbage Collector вручную на этапе выполнения - невозможно. Метод System.gc(); работает только в отладочной версии проигрывателя. В данном примере ты по нажатию на кнопку unloadButton назначаешь myLoader.source=null, пытаешься вызвать GC и тут же пытаешься измерить память. Но нужно время, чтобы сработал GC.
|
|
|||||
Регистрация: Mar 2008
Сообщений: 4
|
Вероятно проблема заключается в подгружаемом SWF файле. Для создания используется программа print2flash, и данные файлы при загрузке в приложение назначают собственные обработчики ряду событий. Поэтому Garbage Collector их не выгружает. Соответсвенно вопрос - можно ли удалить все обработчики событий, которые были назначены из загруженного SWF файла?
|
Часовой пояс GMT +4, время: 19:37. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|