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

TanaTiX 01.08.2009 21:39

Утечка памяти
 
Проблема давнишняя, может есть какой способ избежать утечки памяти? А то при пустой сцене, где нет ничего, кроме класса определяющего эту самую память происходит постепенное накопление последней. Конечно мало кто будет втыкать во флеш на протяжении суток, но все же дело принципа.


ЗЫ. пардон за отдельную тему.

iflamberg 01.08.2009 21:41

это скорее всего значит, что источником утечки памяти является класс, который ее определят =)

WRC_S 01.08.2009 22:06

Класс чё сам ваще делает?

terbooter 01.08.2009 22:40

Код в студию

AL.exe 01.08.2009 23:03

Наверное, создаете что-нибудь в цикле. В любом случае, нужно код смотреть.

TanaTiX 02.08.2009 02:29

Прошу...
Код AS3:

package {
        import flash.text.TextField;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.system.System;
        public class Systems extends Sprite {
                var txt:TextField=new TextField();
 
                public function Systems(x:Number=10,y:Number=10):void {
                        addChild(txt);
                        with (txt) {
                                autoSize="left";
                                this.x=x;
                                this.y=y;
                                width=10;
                                height=10;
                                border=true;
                        }
                        addEventListener(Event.ADDED_TO_STAGE, onStage);
                }
                function onStage(e:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, onStage);
                        addEventListener(Event.ENTER_FRAME, fps);
                }
                function fps(e:Event):void {
                        System.gc();
                        txt.text="Memory: "+Math.ceil(System.totalMemory/1024*100)/100+"Kb, FPS: "+stage.frameRate;
                }
        }
}


ripeLime 02.08.2009 03:22

Цитата:

Сообщение от TanaTiX (Сообщение 839881)
Прошу...
Код AS3:

package {
        import flash.text.TextField;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.system.System;
        public class Systems extends Sprite {
                var txt:TextField=new TextField();
 
                public function Systems(x:Number=10,y:Number=10):void {
                        addChild(txt);
                        with (txt) {
                                autoSize="left";
                                this.x=x;
                                this.y=y;
                                width=10;
                                height=10;
                                border=true;
                        }
                        addEventListener(Event.ADDED_TO_STAGE, onStage);
                }
                function onStage(e:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, onStage);
                        addEventListener(Event.ENTER_FRAME, fps);
                }
                function fps(e:Event):void {
                        System.gc();
                        txt.text="Memory: "+Math.ceil(System.totalMemory/1024*100)/100+"Kb, FPS: "+stage.frameRate;
                }
        }
}


Если бы вы действительно, как писали выше, только бы определяли память, то об её "утечки" речи бы не шло.

TanaTiX 02.08.2009 10:59

ripeLime, а за счет чего происходит тогда постоянный прирост? Ведь количество переменных остается постоянным, никаких новых объектов не создается и сборщик мусора еще работает...

JinRu 02.08.2009 13:03

Вообще, на сколько я знаю, System.gc() работает только в AIR и дебаг плеере
И зачем его каждый кадр вызывать?

silin 02.08.2009 18:35

Цитата:

Сообщение от ripeLime (Сообщение 839882)
Если бы вы действительно, как писали выше, только бы определяли память, то об её "утечки" речи бы не шло.

интересно что бы от этого изменилось, куда она девается в приведенном примере все равно загадка..
к слову: вызов GC за счет 10-чного unloadAndStop (http://www.flasher.ru/forum/blog.php?b=83) решает вопрос, но это, естественно, не выход

ripeLime 02.08.2009 21:23

Цитата:

Сообщение от silin (Сообщение 839979)
интересно что бы от этого изменилось, куда она девается в приведенном примере все равно загадка..
к слову: вызов GC за счет 10-чного unloadAndStop (http://www.flasher.ru/forum/blog.php?b=83) решает вопрос, но это, естественно, не выход

Код AS3:

package {
        import flash.text.TextField;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.system.System;
        public class Systems extends Sprite {
                var txt:TextField=new TextField();
 
                public function Systems(x:Number=10,y:Number=10):void {
                        addChild(txt);
                        with (txt) {
                                autoSize="left";
                                this.x=x;
                                this.y=y;
                                width=10;
                                height=10;
                                border=true;
                        }
                        addEventListener(Event.ADDED_TO_STAGE, onStage);
                }
                function onStage(e:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, onStage);
 
                }
 
        }
}

В этом примере ничего никуда не девается.

silin 02.08.2009 21:52

отличие только в вызове System.totalMemory
он и есть растратчик? :)

Яски 02.08.2009 22:47

Код AS3:

function fps(e:Event):void {


ripeLime 02.08.2009 23:05

Цитата:

Сообщение от silin (Сообщение 840034)
отличие только в вызове System.totalMemory
он и есть растратчик? :)

Нет, отличие не только в этом, посмотрите внимательнее.

silin 02.08.2009 23:29

дада, уже посмотрел - вызов любого листенера (даже 'пустого') приводит к росту
не знал, сори

Яски 03.08.2009 00:24

Это экземпляр евента создается.


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

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