Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   утечка памяти (http://www.flasher.ru/forum/showthread.php?t=141385)

metsys 23.06.2010 18:05

утечка памяти
 
не могу понять где тут идёт утечка оперативной памяти

Код AS3:

package {
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.TimerEvent;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.utils.Timer;
 
        [SWF(width="794", height="340", frameRate="30", backgroundColor="0xAAAAAA", quality="high")]
        public class Gallery extends Sprite
        {
                private var xmlLoader:URLLoader=new URLLoader();
                private var xmlList:XMLList;
                private var xmlData:XML;
 
                private var photoURL_Array:Array=new Array();                                                       
 
                private var timer:Timer=new Timer(5000, 1);
 
                private var picLoader:Loader=new Loader();
 
                public function Gallery()
                {
                        xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedFunc);
                        xmlLoader.load(new URLRequest("gallery.xml"));
                }
 
                private function xmlLoadedFunc(e:Event):void
                {
                        xmlData=new XML(e.target.data);
                        xmlList=xmlData.children();
                        trace("gallery.xml loaded");
 
                        for (var i:int=0; i<xmlData.children().length(); i++)
                        {
                                photoURL_Array[i]=xmlList[i].attribute("photoURL");
                        }
 
                loadingGallery();
                }
 
                private function loadingGallery():void
                {
                        picLoader.load(new URLRequest(photoURL_Array[Math.floor(photoURL_Array.length*Math.random())]));
                        picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, showPic);
                }
 
                private function showPic(e:Event):void
                {
                        addChild(picLoader);
 
                        timer.start();
                        timer.addEventListener(TimerEvent.TIMER_COMPLETE, restart);
                }
 
                private function restart(e:TimerEvent):void
                {
                        removeChild(picLoader);
                        loadingGallery();
                }
        }
}


i.o. 23.06.2010 18:11

picLoader.unload() надо бы вызывать

dimarik 23.06.2010 18:25

Здесь нет утечки. Просто не срабатывает CG. Попробуйте проверить в таком варианте. Dubugger player version only.

Код AS3:

private function restart(e:TimerEvent):void
{
    System.gc();
    removeChild(picLoader);
    loadingGallery();
}


metsys 23.06.2010 18:27

в эту ф-цию пихаю unload

Код AS3:

private function restart(e:TimerEvent):void
                {
                        picLoader.unload();
                        loadingGallery();
                }

не работает(

Добавлено через 46 минут
а вот совет dimarik'а помог частично - действительно работает в дебаг плеере, но в браузере та же история, при чём если свернуть браузер а потом развернуть ОП которую он кушает приложение сбрасывается и начинает по новой наростать

Psycho Tiger 23.06.2010 20:16

Ну нарастёт до какого-то значения, потом упадёт как было.
Посмотрите как GC работает.

i.o. 23.06.2010 20:33

можно утилитку silin'a использовать для насильственного вызова GC :)


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

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