Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Starling] Juggler на что уходит память? (http://www.flasher.ru/forum/showthread.php?t=212643)

faraday 31.03.2016 19:44

Juggler на что уходит память?
 
Приветствую, тестируя анимации, обнаружил что куда-то постоянно утекает память, создавая неприятные фризы после сборки мусора. вот демо пример вызывающий проблему
Код AS3:

                public function JugglerLeak() 
                {
                        for (var i:int = 0; i < 200; i++) {
                                var quad:Quad = new Quad(30, 30, 0xffffff * Math.random());
                                addChild(quad);
                                moveToRand(quad);
                        }
                }
                private function moveToRand(quad:Quad) {
                        Starling.juggler.tween(quad,100,{
                                x:Math.random()*1000,
                                y:Math.random() * 670
                        })
                }

Каждую секунду расходуется около 200 кб памяти, если отключить visible - ниче не меняется. без анмиации - расход памяти нормальный
Scout в allocation выдает расход памяти на уровне 15 кб в секунду, что не соответствует действительности. Я в принципе не могу представить куда она может уходить, если сами твины берутся из пула, а потом лишь обновляются, диспетчеризация событий идет только в самом конце .отсюда вопрос, что я упускаю из вида, и как этого избежать? http://prntscr.com/amg22v

caseyryan 31.03.2016 20:06

Это не твоя тема на старлинговском форуме с аналогичным вопросом случайно?
Какая версия старлинга, кстати? У меня не наблюдается никаких расходов/перерасходов памяти джаглером

faraday 01.04.2016 02:41

Да, соя тема) Старлинг 1.7 плеер 20.0, проблема наблюдается и в релизной и дебажной версии. у тебя код выше выполняется без перерасходов? какая версия у тебя?

caseyryan 01.04.2016 07:12

Проверил. С перерасходами, но дело совсем не в джаглере. Я заменил его на TweenMax и увидел ту же картину. Сдается мне старлинг просто накапливает кучу каких-то данных при отрисовке, которые потом собираются сборщиком мусора. А может и сама ВМ накапливает, особо углублено ковыряться было в лом) В общем-то, сборщик собирает все, и потребление возвращается к тому значению, с которого начиналось. Напрягает только момент сборки мусора. Но это ведь совершенно не оптимизированный код. Такие вещи лучше всего делать через QuadBatch, (или MeshBatch в новом старлинге) и отрисовывать все эти штуки одним скопом

faraday 01.04.2016 12:29

я тоже сразу подумал что дело в рендере, но при выключенном visible он не происходит. потом попробовал удаление со сцены, чтобы исключить пересчет матриц, но результат тот же. только что проверил, проблему создают даже пустые твинеры, поэтому quadBatch тут врядли чем то поможет) Просто не пойму на что она может выделяться. есть объекты, у которых каждый кадр должно меняться свойство. хендлеров update complete нет, событий тоже. получается анимация только на cpu
Код AS3:

Starling.juggler.add(new Tween({}, 15));


caseyryan 01.04.2016 12:45

Цитата:

потом попробовал удаление со сцены, чтобы исключить пересчет матриц
Как удаление со сцены может исключить пересчет матриц?
Цитата:

только что проверил, проблему создают даже пустые твинеры, поэтому quadBatch тут врядли чем то поможет)
Да не твины там перерасходы создают. Посмотри исходники твинов, сам убедишься, что там все чисто. Скорее всего перерасход от EnterFrame событий идет. Хотя тоже вряд ли, так как обычно никаких перерасходов не наблюдается

faraday 02.04.2016 16:23

Цитата:

Как удаление со сцены может исключить пересчет матриц?
объект не рендерится, касания не отслеживаются, больше вроде и не зачем пересчитывать)
А что можно с этим перерасходом сделать? у меня на карте много подвижных объектов, а каждые 10 сек фризится вся карта. если я создаю пустые твины, откуда там взяться enterFrame?
Двигая по enterFrame никаких проблем, и потребление памяти на нуле
Код AS3:

                private function manualMove(e:Event):void 
                {
                        for (var i:int = quads.length-1; i > 0; i--){
                                var quad:Quad = quads[i];
                                var offset:Number = Math.random() * 5;
                                quad.x += offset; quad.y += offset;
                        }
                }


faraday 04.08.2016 20:52

Ни у кого никаких идей не появилось случайно куда расходуется память в простом твинере из 4 строк? при том что juggler их берет из пула

ShockWave512 05.08.2016 10:45

есть у меня проект на старом старлинге 1.х, никаких там нет фризов с твиинами, хотя сотни одновременно объектов твинятся

сейчас соберу тестовый прож

Добавлено через 25 минут
не заметно фризов, сборщик над чем то регулярно работает
flashdevelop, fp22, starling 1.7
фризы есть на 5к объектов
а что у вас за процессор?

faraday 05.08.2016 21:37

на этой демо сцене фризы не заметны да, но память очень быстро куда-то расходуется, не понятно куда. сборщик каждые 15 сек сбрасывает


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

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