![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Привет всем.
Написал приложение, которое состоит из плавно-сменющихся фото и видео слайдов загруженных в реальном времени в Instagram. Каждый новый слайд смещает предыдущий и тот который уже не в поле видимости удаляется с помощью removeChild(). Вещается все это на экраны в ночном клубе. Но через 1-2 часа приложение самопроизвольно закрывается. Через мониторинг системы видно, что память с каждым подгруженным слайдом растет. Видео грузится с помощью класса NestStream. Как я понял удалять просто слайд недостаточно, так как поток остается - его тоже надо закрывать. Делаю stream.close() - но изменений в мониторинге не вижу - память продолжает расти. А картинки гружу через класс Loader - после удаления слайда тоже чистить надо? Заранее спасибо за помощь.
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
|
[+4 06.05.14]
|
По видео
вот так, как шуба из г..ов : 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) { }; } где this - public class SomeClass extends NetConnection
__________________
Марк Tween |
|
|||||
|
.
|
djken, рекомендую воспользоваться профилировщиком Adobe Scout.
С помощью него вы узнаете какие объекты остаются в памяти. Но вот из-за чего они остались, вы не узнаете. Пробуйте его, отпишитесь сюда о результатах. |
|
|||||
|
Цитата:
__________________
...вселенская грусть |
|
|||||
|
пока что ни один из способов не помог... (
Установил Adobe Scout trial версию - поразбираюсь dimarik, чтобы протестировать в Scout нужно флешку компилировать во Flash Builder с включенным параметром телеметрии, а я работаю в Adobe Flash CS6 (( Добавлено через 51 час 56 минут Ура, наконец-то, решил проблему! ![]() Оказалось очень важным использование флага weakReference при подписке на события. Неправильно: Правильно: Такая необходимость обусловлена тем, что хэндлеры по умолчанию считаются как strong reference для объекта, даже если он уже удален. Для тестирования в моем приложении с каждым новым загруженым из Instagram видео-слайдом делаю и видим: 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 Также параллельно мониторю через диспетчер задач - тоже все в порядке теперь - память сбрасывается.
__________________
кто не отвечает, того garbage collector забирает Последний раз редактировалось djken; 13.11.2014 в 21:19. Причина: проблема решена |
|
|||||
|
.
|
Цитата:
По поводу "мягких" ссылок. Ну уж раз вы подписали что-то, то когда это что-то становится ненужным, будьте добры его отписать. Вот и вся суть. |
|
|||||
|
По своему опыту (были приложения которые должны были месяцами работать без перезагрузки и крутить видео, картинки и к тому же быть интерактивными) лучше всего вручную удалять всё что только можно, лоадеры, их контент, переменные и особенно листенеры. К примеру, удаляете экземпляр, вызовите в нем функцию которая зачистит всё, что в нем создавалось. Ну и ссылки на удаляемый экземпляр проверяйте конечно. В принципе любой профайлер должен помочь с отслеживанием удаления объектов.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:32. |
|
|
« Предыдущая тема | Следующая тема » |
|
|