![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2008
Сообщений: 4
|
Среда разработки - 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, время: 02:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|