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

djken 10.11.2014 19:50

Флеш приложение ест память и закрывается
 
Привет всем.
Написал приложение, которое состоит из плавно-сменющихся фото и видео слайдов загруженных в реальном времени в Instagram. Каждый новый слайд смещает предыдущий и тот который уже не в поле видимости удаляется с помощью removeChild().
Вещается все это на экраны в ночном клубе. Но через 1-2 часа приложение самопроизвольно закрывается.

Через мониторинг системы видно, что память с каждым подгруженным слайдом растет.
Видео грузится с помощью класса NestStream. Как я понял удалять просто слайд недостаточно, так как поток остается - его тоже надо закрывать. Делаю stream.close() - но изменений в мониторинге не вижу - память продолжает расти.

А картинки гружу через класс Loader - после удаления слайда тоже чистить надо?

Заранее спасибо за помощь.

in4core 10.11.2014 20:02

По видео
вот так, как шуба из г..ов :
Код AS3:

public function disconnect():void
                {
                        this.removeEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
 
                        if (this._stream)
                        {
                                this._stream.removeEventListener(NetStatusEvent.NET_STATUS, streamStatusHandler);
                                //this._stream.dispose();
                                this._stream.close();
                                this._stream = null;
                        }
 
                        try
                        {
                                this.close();
                        }
                        catch (e:Error) { };
                }

Добавлено через 47 секунд
где this - public class SomeClass extends NetConnection

dimarik 10.11.2014 21:03

djken, рекомендую воспользоваться профилировщиком Adobe Scout.

С помощью него вы узнаете какие объекты остаются в памяти. Но вот из-за чего они остались, вы не узнаете. Пробуйте его, отпишитесь сюда о результатах.

gloomyBrain 10.11.2014 23:16

Цитата:

А картинки гружу через класс Loader - после удаления слайда тоже чистить надо?
Да, после того как убрали Loader с экрана, нужно ему сделать unloadAndStop(). И обязательно убедитесь, что ссылок на него не остается.

djken 11.11.2014 17:14

пока что ни один из способов не помог... (
Установил Adobe Scout trial версию - поразбираюсь

dimarik, чтобы протестировать в Scout нужно флешку компилировать во Flash Builder с включенным параметром телеметрии, а я работаю в Adobe Flash CS6 ((

Добавлено через 51 час 56 минут
Ура, наконец-то, решил проблему! :)
Оказалось очень важным использование флага weakReference при подписке на события.

Неправильно:
Код AS3:

object.addEventListener(Event.CLICK, handlerClick);

Правильно:
Код AS3:

object.addEventListener(Event.CLICK, handlerClick, false, 0, true);

Такая необходимость обусловлена тем, что хэндлеры по умолчанию считаются как strong reference для объекта, даже если он уже удален.

Для тестирования в моем приложении с каждым новым загруженым из Instagram видео-слайдом делаю
Код AS3:

trace(System.totalMemory / 1024);

и видим:

64324
69368
73636
75748
80104
75316
80688
81048
83996
87088
89548
93276
97448
82360
66508
88072
109248
112312
116132
119188
120152
123980
85056
88248
91952
74476
77080
99328
103592
106544
109912
114760
119680
122196
92660
95156
97380
101900
105324
89088
71780
93236
114952
117396
121344
122956
125696
129180
129924
134004
137204
140124
143648
126168
72732
94732
98928
101924
105856
108272
92684
96264
119712
122204
124636
127992
130816
113872
116536
137648
90676
93132
77676
81304
102080
105732
104112
84840
88600
92376
76268
78340
80868
50372
52276
73676

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

dimarik 14.11.2014 10:25

Цитата:

Сообщение от djken (Сообщение 1174833)
dimarik, чтобы протестировать в Scout нужно флешку компилировать во Flash Builder с включенным параметром телеметрии, а я работаю в Adobe Flash CS6 ((

Hem! Гуглите Scout Enabler.

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

Партизан 14.11.2014 11:21

По своему опыту (были приложения которые должны были месяцами работать без перезагрузки и крутить видео, картинки и к тому же быть интерактивными) лучше всего вручную удалять всё что только можно, лоадеры, их контент, переменные и особенно листенеры. К примеру, удаляете экземпляр, вызовите в нем функцию которая зачистит всё, что в нем создавалось. Ну и ссылки на удаляемый экземпляр проверяйте конечно. В принципе любой профайлер должен помочь с отслеживанием удаления объектов.


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

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