Форум Flasher.ru

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

Exey 16.12.2009 14:14

Очистка памяти после BitmapData.draw()
 
Если положить на стейдж изображение 800х600 тратиться 17Mb RAM / 14Mb Virtual
Но если отрисовать 1200 спрайтов(в каждом по 100 кружков), cделать draw(), удалить кружки и насильно вызвать Garbage Collector,
остается гораздо больше 36Mb RAM / 33Mb Virtual :(

Код AS3:

var container:Sprite = new Sprite();
 
// adding 1200 sprites
var shiftX:Number = 10;
var shiftY:Number = 10;
for (var i:int = 0; i < 1200; i++) {
        var circle:Sprite = new Sprite();
        // drawing 100 circles
        for (var j:int = 0; j < 100; j++) {
                circle.graphics.beginFill(0xFFFFFF/j*i);
                circle.graphics.drawCircle(0, 0, 10-j*.1);                                       
        }
        circle.x = shiftX;
        circle.y = shiftY;
        shiftX += 20;
        if ( shiftX >= stage.stageWidth ) {
                shiftX = 10;
                shiftY += 20;
        }
        container.addChild(circle);
}
 
// draw() and adding bitmap
var bmd:BitmapData = new BitmapData(800, 600, true, 0x00FFFFFF);
bmd.draw(container);
var bmp:Bitmap = new Bitmap(bmd, "auto", true);
addChild(bmp);
 
// removing sprites
while (container.numChildren) container.removeChild(container.getChildAt(0));
 
// Force Garbage Collector 1
System.gc();
System.gc();
 
// Force Garbage Collector 2
try {
        new LocalConnection().connect('foo');
        new LocalConnection().connect('foo');
} catch (e:Error) {}

Что еще надо удалить/обnullить? Куда девается память?

GentleFLASH 16.12.2009 15:15

bitmapData.dispose()

Волгоградец 16.12.2009 15:57

Вы уверены, что все спрайты после зачистки удаляются? Говорят, флексовый профайлер помогает следить за состоянием памяти.

Exey 16.12.2009 16:21

Вложений: 1
Цитата:

Сообщение от GentleFLASH (Сообщение 873018)
bitmapData.dispose()

дык ведь тогда сотрется картинка BitmapData то одна, битмап мне нужен. Смысл вопроса почему если битмап тупо загрузить он в разы меньше съедает памяти чем если создать его динамически через draw()

Цитата:

Сообщение от Волгоградец (Сообщение 873027)
Вы уверены, что все спрайты после зачистки удаляются? Говорят, флексовый профайлер помогает следить за состоянием памяти.

Все удаляется

GentleFLASH 16.12.2009 16:56

Цитата:

Смысл вопроса почему если битмап тупо загрузить он в разы меньше съедает памяти чем если создать его динамически через draw()
Не знать. Такая же ситуация если в библиотеке картинке класс для AS3 задать - тоже памяти больше занимает и создается кстати дольше, чем если бы ей класс не назначался.

etc 16.12.2009 20:16

Это особенности работы операционной системы и плеера в ней.


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

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