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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.11.2013, 22:27
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 1  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
По умолчанию Работа с памятью во флеше

Добрый вечер. Вычитал на одном из сайтов такую методику при загрузке изображения. Цитирую один из пунктов: "Loader в дефолтном своем применении порождает утечки памяти. Поэтому если через него загружается картинка, то надо брать её BitmapData и делать bitmapData.clone(), сохраняя в другую переменную. А потом диспозить существующую картинку в Loader, а затем делать loader.unload(). Ещё на всякий случай можно cacheAsBitmap=false."

Код AS3:
var bitmapData:BitmapData = (loader.contentLoaderInfo.content as Bitmap).bitmapData.clone();
(loader.content as Bitmap).cacheAsBitmap = false;
(loader.content as Bitmap).bitmapData.dispose();
(loader.content as Bitmap).bitmapData = null;
(loader.contentLoaderInfo.content as Bitmap).bitmapData = null;
loader.unload();
В общем хотел узнать у знающих людей, насколько стоит доверять данной инфе и стоит ли использовать данный хак?

Старый 17.11.2013, 22:36
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 2  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Если это окажется правдой (а я так думаю), то можно будет сделать утилиту:
Код AS3:
public static function getContent(loader:Loader):BitmapData {
    var infoContent:Bitmap = loader.contentLoaderInfo.content as Bitmap;
    var content:Bitmap = loader.content as Bitmap;
    var bitmapData:BitmapData = content.bitmapData.clone();
    content.cacheAsBitmap = false;
    content.bitmapData.dispose();
    content.bitmapData = null;
    infoContent.bitmapData.dispose();
    infoContent.bitmapData = null;
    loader.unload();
    return bitmapData;
}

Старый 19.11.2013, 00:27
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 3  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
У меня только такой вопрос. Если я загружаю изображение с локального диска, то как мне обратится к лоадеру после загрузки изображения? Ведь к изображению да и к лоадеру я смогу обратится только лишь после того, как будет отработано событие Event.COMPLETE

Код AS3:
private function loadCompleteHandler(event:Event):void
{	
	var data:ByteArray = _fileReference.data;
	var loader:Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoadCompleteHandler);
	loader.loadBytes(data);
	_fileReference = null;
}
 
private function imageLoadCompleteHandler(event:Event):void
{
	var image:Bitmap = event.target.content as Bitmap; // Как обратится к лоадеру, как показано в предыдущем посте с кодом
}

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Сделать лоадер полем класса например, либо e.currentTarget.loader
__________________
Марк Tween

Старый 19.11.2013, 01:19
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 5  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
Цитата:
Сообщение от in4core Посмотреть сообщение
Сделать лоадер полем класса например, либо e.currentTarget.loader
Попробовал второй вариант. Действительно, как то в голову не пришло, что через event.target доступно св-во loader. Вот финальный результат:

Код AS3:
private function imageLoadCompleteHandler(event:Event):void
{
	var bitmapData:BitmapData = (event.target.loader.contentLoaderInfo.content as Bitmap).bitmapData.clone();
	(event.target.loader.content as Bitmap).cacheAsBitmap = false;
	(event.target.loader.content as Bitmap).bitmapData.dispose();
	(event.target.loader.content as Bitmap).bitmapData = null;
	(event.target.loader.contentLoaderInfo.content as Bitmap).bitmapData = null;
	event.target.loader.unload();
 
	_image = new Bitmap(bitmapData);
}
Только я не до конца понимаю, действительно ли таким образом при обращении через event.target диспозится Loader.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Порно ваш финальный резултат.
var content:Bitmap = event.target.loader.content as Bitmap;
а потом уже обращаться напрямую
content.cacheAsBitmap = false; и ит.п.
__________________
Марк Tween

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от helio Посмотреть сообщение
Добрый вечер. Вычитал на одном из сайтов такую методику при загрузке изображения.
Цитата:
Иследования проводились только для версии 11.1 standalone debugger...
Дальше можно было не читать.
Цитата:
Сообщение от helio Посмотреть сообщение
В общем хотел узнать у знающих людей, насколько стоит доверять данной инфе и стоит ли использовать данный хак?
Для начала необходимо подтвердить факт наличия проблемы.

Добавлено через 46 минут
P.S. Краткое описание работы с памятью.
__________________
משיח לא בא
משיח גם לא מטלפן

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Верное тут только одно - пользоваться лоадером как дисплей-обжектом - моветон.
лоадер должен грузить, а не показывать.
Соответственно во имя богов ООП при любых раскладах надо из лоадера выдрать контент, а сам лоадер пришибать.
А вот как его пришибать и как выдирать из него контент - вопрос левый.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Dukobpa3 а при работе с ВК АПИ ты тоже так скажешь? Хотя да, это наверное единственно место где печально, в остальном надо выдергивать
__________________
Марк Tween

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
При работе с вк апи я сделаю работу вк апи через жс, и оберну в свои адекватные интерфейсы.

Добавлено через 33 секунды
Всмысле социальный враппер будет в жс, а не во флеше. А флеш будет с моим жс общаться а не с вк напрямую.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Теги
loader as3 , memory leaks , память

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

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


 


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


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