Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2014, 19:50
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 1  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Question Флеш приложение ест память и закрывается

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

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

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

Заранее спасибо за помощь.
__________________
кто не отвечает, того garbage collector забирает

Старый 10.11.2014, 20:02
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По видео
вот так, как шуба из г..ов :
Код 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
__________________
Марк Tween

Старый 10.11.2014, 21:03
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 3  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
djken, рекомендую воспользоваться профилировщиком Adobe Scout.

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

Старый 10.11.2014, 23:16
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 4  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
А картинки гружу через класс Loader - после удаления слайда тоже чистить надо?
Да, после того как убрали Loader с экрана, нужно ему сделать unloadAndStop(). И обязательно убедитесь, что ссылок на него не остается.
__________________
...вселенская грусть

Старый 11.11.2014, 17:14
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 5  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
пока что ни один из способов не помог... (
Установил 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

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


Последний раз редактировалось djken; 13.11.2014 в 21:19. Причина: проблема решена
Старый 14.11.2014, 10:25
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от djken Посмотреть сообщение
dimarik, чтобы протестировать в Scout нужно флешку компилировать во Flash Builder с включенным параметром телеметрии, а я работаю в Adobe Flash CS6 ((
Hem! Гуглите Scout Enabler.

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

Старый 14.11.2014, 11:21
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 7  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
По своему опыту (были приложения которые должны были месяцами работать без перезагрузки и крутить видео, картинки и к тому же быть интерактивными) лучше всего вручную удалять всё что только можно, лоадеры, их контент, переменные и особенно листенеры. К примеру, удаляете экземпляр, вызовите в нем функцию которая зачистит всё, что в нем создавалось. Ну и ссылки на удаляемый экземпляр проверяйте конечно. В принципе любой профайлер должен помочь с отслеживанием удаления объектов.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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