Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   System.totalMemory: ударные темпы роста (http://www.flasher.ru/forum/showthread.php?t=135972)

tkaChuck 06.02.2010 03:13

System.totalMemory: ударные темпы роста
 
Здравствуйте.

имеем [CENSORED]
в левом верхнем углу там видно System.totalMemory.
перемещаясь по portfolio, можно легко убедиться, что System.totalMemory все время возрастает. когда доходит дело до видео то вообще.
водскажите пожалуйста, что я делаю не так?

класс для объекта галереи:
Код AS3:

package portfolio{
        import flash.events.*;
        import flash.display.Loader;
    import flash.display.LoaderInfo;
        import flash.display.MovieClip;
        import flash.net.URLRequest;
 
        public class portfolioPicture extends flash.display.MovieClip{
                public        var        _picture:pic,
 
                                                loadDone:Boolean,
 
                                                under:MovieClip,
                                                preloader:MovieClip,
                                                pictureLoader:Loader,
                                                bu:transB;
 
                public function portfolioPicture(initPic:pic){
                        ////////////////////////////////////////
                        _picture=new pic;
                        _picture=initPic;
 
 
                        x=_picture.__x;
                        y=_picture.__y;;
 
 
 
                        ////////////////////////////////////////
                        under=new trans;
                        var ram:int=6;
                        with(under){
                                x=-ram;
                                y=-ram;
                                width=_picture.__width+ram*2;
                                height=_picture.__height+ram*2;
                                name="Underlay";
                        }
                        this.addChild(under);
 
                        ////////////////////////////////////////
                        loadDone=false;
 
                        preloader=new picPreload;
                        preloader.x=_picture.__width/2;
                        preloader.y=_picture.__height/2;
                        preloader.scaleX=preloader.scaleY=.2;
                        preloader.name="Preloader";
                        addChild(preloader);
 
                        pictureLoader = new Loader();
                        pictureLoader.load(new URLRequest(_picture.__url));
                        pictureLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, _loaded,false,0,true);
                        pictureLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, _progress,false,0,true);
                        pictureLoader.name="Loader";
                        addChild(pictureLoader);
 
                        ////////////////////////////////////////
                        if(_picture.__isButton) {
                                bu=new transB;
                                bu.name="Button";
                                bu.width=_picture.__width,bu.height=_picture.__height;
                                bu.addEventListener(MouseEvent.MOUSE_DOWN,mousedown,false,0,true);
                                addChild(bu);
                        }
 
                        ////////////////////////////////////////
                        this.addEventListener(Event.REMOVED_FROM_STAGE,removedEvent,false,0,true);
                }
 
                function removedEvent(ev:Event){
                                this.removeEventListener(Event.REMOVED_FROM_STAGE, removedEvent);
                                destroy();
                        }
 
                function mousedown(e:MouseEvent){
                        (parent.parent as MovieClip)._lagrePic(_picture.__chapter,_picture.__part,_picture.__num);
                }
 
                function _loaded(e:Event){
                        loadDone=true;
                        stopLoadingProgress();
                        pictureLoader.width=_picture.__width;
                        pictureLoader.height=_picture.__height;
                }
 
                function _progress(e:ProgressEvent){
                        var tk:int=e.target.bytesLoaded/e.target.bytesTotal*100;
                        preloader.indicate(tk);
                }
 
                function destroy(){
                        stopLoader();
                        while(numChildren) removeChildAt(0);
                        if(_picture.__isButton) bu.removeEventListener(MouseEvent.MOUSE_DOWN,mousedown);
                        _picture=null,under=null,bu=null;
                        //trace("portfolio picture completely destroyed")
 
                }
 
                function stopLoader(){
                                if(pictureLoader) {
                                        removeChild(pictureLoader);
                                        if(loadDone){
                                                pictureLoader.unload();
                                                } else {
                                                pictureLoader.close();
                                                pictureLoader.unload();
                                                stopLoadingProgress();
                                                }
                                        }       
                                        pictureLoader=null;
 
                                }
 
                function stopLoadingProgress(){
                        pictureLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, _loaded);
                        pictureLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,_progress);
                        removeChild(preloader);
                        preloader=null;
                }
 
                }
}


класс для группы тумбнейлов:

Код AS3:

package portfolio{
        import flash.display.MovieClip;
        import flash.events.Event;
 
        public class portfolioThumbs extends flash.display.MovieClip{
                public function portfolioThumbs(partToBeDrawn:poItem){
                        for(var n=0;n<partToBeDrawn.thumbs.length;n++){
                                var thu:portfolioPicture=new portfolioPicture(partToBeDrawn.thumbs[n]);
                                thu.name=("thumb_N_"+n);
                                this.addChild(thu);
                        }
                        this.addEventListener(Event.REMOVED_FROM_STAGE,removedEvent,false,0,true);
                        }
 
                function removedEvent(ev:Event){
                                this.removeEventListener(Event.REMOVED_FROM_STAGE, removedEvent);
                                destroy();
                                }
 
                function destroy(){
                        while(numChildren>0) removeChild(getChildAt(0));
                        //trace("thumbnails destroyed");
                        }
                }
        }


wvxvw 06.02.2010 04:41

Для оформления кода используйте теги [as3][/as3].

tkaChuck 06.02.2010 05:54

да, прошу прощения.

tkaChuck 17.02.2010 06:11

да, насколько я могу судить, это главное. - и память свободна)

Добавлено через 23 минуты
я все зануляю, от всего отписываюсь, удаляю не только главный объект из дисплейлиста но и всех детей от него тоже, и их детей, и детей их детей. объекты вроде перестают существовать, но память жрется с бешеной скоростью и не освобождается никогда. браузер рано или поздно виснет.. заказчик скоро меня пошлет.

ответьте пожалуйста на такие вопросы а то я сам не уверен.
1. если объекты имеют ссылки друг на друга, но находятся не в дисплейлисте, и никто в дисплейлисте не имеет ссылок на эти объекты. будут ли они уничтожены?

2. неужели нет способа вызывать GC принудительно? А то, например, когда в галереее загружается видео, тоталмемори возрастает, потом (когда его уже типа удалили)снижается но не до исходной отметки, и очень не сразу. хотя я останавливаю видео и делаю unload(); .. и тормозит. на это видео натравить бы GC сразу как я отписался.

3. когда делаешь debug->list objects (ctrl-L), видишь там только элементы дисплейлиста. их и так видно, а как увидеть те которые НЕ в дисплейлисте?

4. Почему не работает download? имеем
Код AS3:

var fileRef:FileReference=new FileReference();
var req:URLRequest = new URLRequest("http://www.eyesofdream.com/resume.pdf");
fileRef.download(req,"resume.pdf");

выбор куда сохранять происходит, и все. тишина.

5. Через неравные промежутки времени происходит нечто, и памяти становится занято на 41 байт больше. это необратимо. уже я искал всячески. что это такое может быть?

6. что происходит с объектами, которые не в текущем кадре? вот, скажем, у меня есть в кадре #40 такое.
Код AS3:

buttonPDF.addEventListener(MouseEvent.CLICK,clickPDF,false,0,true);

.
и вот, я перехожу в соседний кадр. кнопки больше в дисплейлисте нет. в списке объектов (в дебаггере List Objects) ее нет. но память она занимает и со временем никуда не девается! или нет?
7. когда вызывается fileReference.browse(), то все останавливается. как это вызвать самостоятельно?

прошу вас, братцы, помогите я сильно горю по срокам.

etc 17.02.2010 07:38

Картинки каких размеров?
И да, потребление 400+ мегабайт памяти и 120% двухядерного процессора — не самое лучшее достоинство сайта. Я бы сказал, главная особенность.

tkaChuck 17.02.2010 09:54

а, картинки маленьки ваще..

Да, как бы нифига ни разу не круто. У меня 140%. Еще это небо. Оно обязательное условие в "дизайне".. Оно в эти 140 делает значительный вклад. Дополнительный вопрос: как можно оптимизировать проигрывание ролик на фоне? сейчас это видео на таймлайне

etc 17.02.2010 10:52

Цитата:

Сообщение от tkaChuck (Сообщение 887155)
Дополнительный вопрос: как можно оптимизировать проигрывание ролик на фоне?

Убрать его вообще. Равно как и проплывающие хреновины.

scarbo 17.02.2010 10:53

Ох, ты ё, это видео, а я думал что Вы так с PerlinNoise так зафигачили.
Ну во-первых убрать видео с тамлайна, и запустить сайт без него.
У Вас же сайт-то простой, там нет ничего такого чтобы жрало ресурсы.
Попробуйте убрать фоновое видео, и потом летающие штуки, Вы их удаляете,когда они за экран уходят?

TERRORist 17.02.2010 11:34

Цитата:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at portButtonMain/_activate()
at portButtonMain/frame10()
ошибка

tkaChuck 18.02.2010 13:51

я горжусь вами, братцы.
На вопрос "что делать с небом - оно должно присутствовать но не тормозить?" получаем два отличных совета от него избавиться.
На главный вопрос "что жрет ресурсы??" имеем "там нет ничего такого чтобы жрало ресурсы".
Ну и в довершение, внезапно обнаружена ошибка. прелестно.

Старый анекдот. Водитель выходит из автобуса и начинает чинить. Тут к нему подходит мальчик и говорит: Дядя я знаю, что у вас сломалось. Водитель кричит: Ну и что у меня сломалось??? Мальчик отвечает: Дядя у вас сломался автобус.

вы простите за сарказм, просто поймите правильно. я делаю все что знаю, но элементарный сайт жрет раз в 20 больше чем должен. Это мой первый проект на АС3.. вот что я делаю. я зануляю все ссылки на объекты, которые мне больше не нужны. тоесть делаю этим переменным =null. Я отписываюсь от всех листенеров, и на всякий случай всегда юзаю weakReference. лоадерам всем я делаю unload.

я положил там два класса. ими одними можно добиться невиданных тормозов, поверьте)


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

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