|
|
|||||
Регистрация: Jan 2008
Сообщений: 221
|
Memory Management
Есть флешка которая грузит в себя as2 банеры, спустя какое то время банер удаляется и грузится новый. Проблема в том, что с каждой загрузкой
банера флеш плеер потребляет больше памяти. Как с этим бороться? а точнее как очистить память от неиспользуемых объектов ? код: package { import br.com.stimuli.loading.*; import br.com.stimuli.loading.loadingtypes.*; import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.Timer; import utils.MemoryController; public class BanerChanger extends Sprite { private var loader: BulkLoader; private var xmlLoader:BulkLoader = new BulkLoader("XmlLoader"); // private var xmlUrl:String = "cfg.xml"; private var xmlUrl:String; private var theXML: XML; private var banerSrcArr:Array = new Array(); private var timersArr:Array = new Array(); private var totalNum:Number; private var index:Number = 0; private var currentAVM:AVM1Movie; private var mMemoryController:MemoryController; private var frameRateArr:Array = new Array(); public function BanerChanger() { super(); xmlUrl = this.loaderInfo.parameters.xml_url; xmlLoader.add(xmlUrl); mMemoryController = new MemoryController(); xmlLoader.start(); xmlLoader.addEventListener(BulkProgressEvent.COMPLETE, completeXmlHnd); } /************************************************************************** * @private * Обработка загрузки ХМЛ ****************************************************************************/ private function completeXmlHnd(evt: BulkProgressEvent) : void { theXML = xmlLoader.getXML(xmlUrl); totalNum = theXML.file.length(); var t:Number; for each (var banerUrl:XML in theXML.file) { banerSrcArr.push(new String(banerUrl)); t=banerUrl.@time; timersArr.push(t*1000); frameRateArr.push(banerUrl.@speed); } Load(0); } /************************************************************************** * @private * ****************************************************************************/ private function Load(inx:Number ) : void { loader = new BulkLoader("test"); loader.add(banerSrcArr[inx]); loader.addEventListener(BulkLoader.COMPLETE, onComplete); loader.start(); } /************************************************************************** * @private * ****************************************************************************/ private function onComplete(evt : BulkProgressEvent) : void { currentAVM = loader.getAVM1Movie(banerSrcArr[index], true); stage.frameRate = frameRateArr[index]; bord.addChildAt(currentAVM,0); var theTimer:Timer = new Timer(timersArr[index], 1); theTimer.addEventListener(TimerEvent.TIMER, timerHnd); theTimer.start(); } /************************************************************************** * @private * ****************************************************************************/ private function timerHnd(evt:Event):void { bord.removeChild(currentAVM); currentAVM = null; if(index<=totalNum-2){ index++; }else { index=0; } loader.clear(); loader.removeAll(); loader = null; Load(index); } } } 3. кто какие приёмы и классы использует для управления памятью ? |
|
|||||
Регистрация: May 2008
Сообщений: 20
|
Код не смотрел, голова квадратная, но могу дать пару общих советов:
- удаляй все что можешь удалить; если Listener не используется делай ему remove; если ссылка не используется присваивай ей null; - поиграйся с классом System, там есть такой полезный метод как System.gc(), это форсированный вызов Garbage Collector; Памятью тут сильно не на управляешь, главное что меньше мемори ликов было, но это уже приходит с практикой. Еще можно использовать мягкие ссылки на объекты, вот почитай тут http://flasher.ru/forum/showthread.php?p=577862 (там внизу) И вот тут еще почитай http://www.dtf.ru/articles/print.php?id=51967 Еще можно посмотреть в сторону delete Вот тут приводят интересный трюк http://actionscript-blog.imagination...tion-script-3/ В общем советую познакомится с выше перечисленным и тогда обязательно появятся идеи, а главное это практика практика практика... |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Я бы не рекомендовал использовать мягкие ссылки.
|
|
|||||
__etc
Аргументы?
__________________
Тихо, идёт запись! |
|
|||||
возьму на себя смелость, исходя из того что я уже слышал от _итсетера(лень переключаться было, без обид). Я думаю что он имел ввиду, что твердые жесткие или как там они ссылки, приучают тебя за ними следить, а как только ты начнешь пользоваться мягкими, ты можешь к ним привыкнуть и переложить свою работу на мусорщика, который работает по только ему известным законам. А так наверное, более обьективных причин нет, но возможно я ошибаюсь, так что лучше дождись, _итсетера
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Они частенько бывают очень даже жесткими. К тому же, сам насорил, сам убрал, а не оставляешь это дело ленивой уборщице по имени GC.
|
Часовой пояс GMT +4, время: 16:19. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|