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

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

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

Регистрация: Mar 2008
Сообщений: 4
По умолчанию SWFLoader - как освободить используемую память

Среда разработки - Flex Builder 3.
Для последовательной демонстрации набра SWF файлов (20 -70 шт.) используется компонент SFWLoader (mx.controls.SWFLoader). Для загрузки нового файла используется
Код:
mySWFLoader.source = fileName;
Проблема заключается в том что при большом количестве загружаемых файлов занятой оказывается 70-80% системной памяти (например 1,5 - 1,8 Gb). Можно ли каким-то образом принудительно освободить память, выделяемую SWFLoader - ом?

Старый 30.03.2008, 21:41
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 2  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
присваивать сначала source = null не помогает?
__________________
4am is time to rock

Старый 31.03.2008, 10:44
hton вне форума Посмотреть профиль Отправить личное сообщение для hton Найти все сообщения от hton
  № 3  
Ответить с цитированием
hton

Регистрация: Mar 2008
Сообщений: 4
К сожалению, нет. Не помогает. Может быть у кого ни будь есть готовый работающий пример?

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

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 784
Отправить сообщение для Бармалей с помощью ICQ
Назначить source = null и подождать, когда Garbage Collector грохнит ненужные объекты в памяти, не пробовали?
__________________
Garbage Collector || AIR (Apollo) Docs

Старый 31.03.2008, 21:38
hton вне форума Посмотреть профиль Отправить личное сообщение для hton Найти все сообщения от hton
  № 5  
Ответить с цитированием
hton

Регистрация: Mar 2008
Сообщений: 4
Вполне возможно, что я что то не понимаю, привожу простой пример, в котором не освобождается память - что нужно поправить?
Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" width="460" height="200">
	<mx:Script>
	<![CDATA[
		import flash.events.*
		import flash.net.URLRequest;
		import mx.controls.SWFLoader;

		[Bindable] private var loaded:Boolean = false;
		private var myLoader:SWFLoader=new SWFLoader();

		private function init():void{
			myLoader.showBusyCursor = true;
			myLoader.x=10;
			myLoader.y=10;
			myLoader.width=196;
			myLoader.height=124; 
			this.addChild(myLoader); 
			mem.text=System.totalMemory.toString(); 
		}
		private function loadButtonHandler(e:Event):void{
			myLoader.load("demo.swf");
			mem.text=System.totalMemory.toString();
		}
		private function unloadButtonHandler(e:Event):void{
			myLoader.source=null;
			System.gc();
			mem.text=System.totalMemory.toString();
		} 
	]]>
	</mx:Script>
	<mx:Button x="7" y="154" label="Load SWF" id="loadButton" click="{loadButtonHandler(event)}"/>
	<mx:Button x="359" y="154" label="Unload SWF" id="unloadButton" click="unloadButtonHandler(event)" />
	<mx:Label x="236" y="114" text="Label" width="101" height="32" id="mem"/>
</mx:Application>
В качестве demo.sfw используйте пожалуйста любой файл (я использую файл размером 19 мегабайт), эффект вполне очевиден.

Старый 01.04.2008, 01:56
Бармалей вне форума Посмотреть профиль Отправить личное сообщение для Бармалей Посетить домашнюю страницу Бармалей Найти все сообщения от Бармалей
  № 6  
Ответить с цитированием
Бармалей
 
Аватар для Бармалей

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 784
Отправить сообщение для Бармалей с помощью ICQ
Вызывать Garbage Collector вручную на этапе выполнения - невозможно. Метод System.gc(); работает только в отладочной версии проигрывателя. В данном примере ты по нажатию на кнопку unloadButton назначаешь myLoader.source=null, пытаешься вызвать GC и тут же пытаешься измерить память. Но нужно время, чтобы сработал GC.
__________________
Garbage Collector || AIR (Apollo) Docs

Старый 01.04.2008, 12:49
hton вне форума Посмотреть профиль Отправить личное сообщение для hton Найти все сообщения от hton
  № 7  
Ответить с цитированием
hton

Регистрация: Mar 2008
Сообщений: 4
Вероятно проблема заключается в подгружаемом SWF файле. Для создания используется программа print2flash, и данные файлы при загрузке в приложение назначают собственные обработчики ряду событий. Поэтому Garbage Collector их не выгружает. Соответсвенно вопрос - можно ли удалить все обработчики событий, которые были назначены из загруженного SWF файла?

Старый 07.12.2010, 19:23
kemsky вне форума Посмотреть профиль Отправить личное сообщение для kemsky Найти все сообщения от kemsky
  № 8  
Ответить с цитированием
kemsky

Регистрация: Dec 2010
Сообщений: 10
Записей в блоге: 1
var loader:SWFLoader = SWFLoader(object);
loader.unloadAndStop(true);

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

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

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


 


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


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