Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   про освобождение памяти -System.gc() (http://www.flasher.ru/forum/showthread.php?t=118939)

kia007 08.12.2008 13:15

про освобождение памяти -System.gc()
 
Всем привет!
Столкнулся с проблемой, что флэшка в браузере постоянно растет в размере.
Вероятно это из за того что долгое время не срабатывает gc.
Читал тут что можно вызвать принудительно gc с помощью localConnection
.
Хотя увидел в документации что типа есть такой метод System.gc().
Но из за этого:
Цитата:

For the Flash Player debugger version and AIR applications only
этот метод получается нет смысла запускать врелизной флэшке в браузере....
Как быть сейчас с этим? Есть ли еще какие методы очистки, или только через localConnection?
Заранее спасибо:)

wvxvw 08.12.2008 13:48

Через ЛК тоже не поможет, если ГК не может удалить объект. Эту проблему нужно искать и решать по-другому. Попробуйте во Флексе запустить профайлер и посмотреть, что не удаляется из памяти.

kia007 08.12.2008 13:58

наверное щас отправят гуглить как запускать профайлер...
я работаю во flashDevelop+flex_sdk и плюс делаю копноненты swc в cs3.
Как его запустить то?где чего нажимать?)

причем здесь на форуме сейчас успел прочитать что System.gc() в 10 плеере работает....так ли это?

iNils 08.12.2008 14:18

Цитата:

Сообщение от kia007 (Сообщение 782255)
причем здесь на форуме сейчас успел прочитать что System.gc() в 10 плеере работает....так ли это?

не так

kia007 08.12.2008 14:21

тогда как чистить память?
во флэш постоянно очень активно создаются временные локальные переменные, которые потом должны по идее удаляться, ну покажет мне профайлер что типа такая то переменная не удалена, и что с этой информацией делать?:)

wvxvw 08.12.2008 14:23

Профайлер это инстумент доступный только во флекс билдере, увы, альтернативных профайлеров я не знаю.
Но смысл даже не в этом. Просто ГК убирает из памяти то, что можно убрать, и делает это достаточно регулярно, т.е. если что-то занимает память и "не хочет" ее освобождать, то принудительный вызов ГК ничем не поможет. Нужно искать внешние не обнуленные ссылки, не убраные экземплаяры битмапдаты, не выключенные таймеры и т.д.

_Smirnoff 08.12.2008 14:24

В области функции все локальные удаляются. Проследи за своими объектами, корректно ли ты их удаляешь.

kia007 08.12.2008 14:34

ок, спасибо!

Волгоградец 08.12.2008 15:03

Вообще работа мифического GC покрыта туманом. Вот простенький тест:
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.TimerEvent;
        import flash.system.System;
        import flash.utils.Timer;
        import ru.inils.utils.Debugger;
 
        public class Main extends Sprite
        {
                private var arr:Array = new Array();
                private var timer:Timer;
                private var s:Sprite;
 
                public function Main():void
                {
                        Debugger.trace(System.totalMemory / 1048576);
                        for (var i:uint = 0; i < 700000; i ++) {
                                s = new Sprite();
                                arr.push(s);
                        }
 
                        Debugger.trace(System.totalMemory / 1048576);
                        for (var j:Number = 0; j < arr.length; j ++ ) {
                                arr[j] = null;
                        }
 
                        Debugger.trace(System.totalMemory / 1048576);
 
                        timer = new Timer(5000);
                        timer.addEventListener(TimerEvent.TIMER, test);
                        timer.start();
                }
 
                private function test(e:TimerEvent):void {
                        Debugger.trace(System.totalMemory / 1048576);
                        //System.gc();
                }
        }
}

Если раскомментить последнюю строку - то все ок - память очищается. Если же нет (как и есть в релизном плеере), то фиг память очищается - у меня заняло 356 МБ и продолжает расти потихоньку (тоже непонятно почему). Вот уже 10 мин плеер работает - память не очищается...

Добавлено через 27 минут
Прошло 32 минуты. Память 357.4375 МБ. Не очистилась. Неужели по мнению GC 357 МБ - это незначительный объем, раз он не срабатывает?

kia007 08.12.2008 15:47

жесть)


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

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