Форум 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=145518)

parl 11.10.2010 04:56

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

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite
        {
                [Embed(source='assets/testSprite.swf', symbol='testSprite')]
                private static const embedResourse : Class;
 
                private var _testSprite : Sprite;
                private var _y : Number = 0;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
 
                        stage.addEventListener(MouseEvent.CLICK, onChangeSprite);
                }
 
                private function onChangeSprite( e : MouseEvent ) : void {
 
                        if ( _testSprite ) {
                                removeChild(_testSprite);
                                _testSprite = null;
                        }
 
                        _testSprite = new embedResourse();
                        _testSprite.y = _y;
                        addChild(_testSprite);
 
                        if ( _y > 200 ) _y = 0;
                        _y += 20;
                }
 
        }
 
}

Подскажите, в чем может быть дело?

P.S. В архиве FD проект примера.

mayakwd 11.10.2010 10:54

дело в том что вы не дожидаетесь вызова gc. чтобы проверить очистилась ли память от объектов или нет.

random13 11.10.2010 11:20

запустите профилирование и принудительно включите gc, увидите разницу

parl 11.10.2010 11:37

В том то и дело, в профайлере запускаю gc, память немного падает, но незначительно.
Пример:
Нет объектов на сцене - 5688кб
Первая интерация - 10476кб
40ая интерация - 24948
После запуска gc - 21100кб (10000кб пропало)

arkadattx 11.10.2010 11:50

gc за раз может не почистить все сразу

AlexDesinger 11.10.2010 12:22

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

Я бы лучше удаленный ресурс делал через "load/unload" чем "removeChild".

random13 11.10.2010 12:56

ну блин запустите его еще раз если рано или поздно все удалить значит есть мысль пересмотреть архитектуру, а если что то останется то тут вопрос уже в том что значит что-то до конца не удаляется)

parl 11.10.2010 15:53

Он не удаляет впринципе, не рано, не поздно, вообще не удаляет.
Может быть пробелема во флеш плеере, версия там какая-нибудь без GC?

Bgg 11.10.2010 16:02

Вообще не такие уж и критичные цифры, что бы искать "проблемы во флеш плеере".

parl 11.10.2010 16:13

Вообще можно и до 1Гб нагрузить, все-рано ничего не чистится. В дисплей листе всего один объект, а 1Гб памяти занят


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

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