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

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

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

Регистрация: Jan 2008
Сообщений: 221
По умолчанию Memory Management

Есть флешка которая грузит в себя as2 банеры, спустя какое то время банер удаляется и грузится новый. Проблема в том, что с каждой загрузкой
банера флеш плеер потребляет больше памяти. Как с этим бороться?
а точнее как очистить память от неиспользуемых объектов ?
код:

Код AS3:
package {
		import br.com.stimuli.loading.*;
		import br.com.stimuli.loading.loadingtypes.*;
		import flash.display.*;
		import flash.events.*;
		import flash.text.*;
		import flash.utils.Timer;
		import utils.MemoryController;
 
	public class BanerChanger extends Sprite
	{
		private var loader: BulkLoader;
		private var xmlLoader:BulkLoader = new BulkLoader("XmlLoader");
	//	private var xmlUrl:String = "cfg.xml";
		private var xmlUrl:String;
		private var theXML: XML;
		private var banerSrcArr:Array = new Array();
		private var timersArr:Array = new Array();
		private var totalNum:Number;
		private var index:Number = 0;
		private var currentAVM:AVM1Movie;
		private var mMemoryController:MemoryController;
		private var frameRateArr:Array = new Array();
 
		public function BanerChanger()
		{	
		    super();
		    xmlUrl = this.loaderInfo.parameters.xml_url;
			xmlLoader.add(xmlUrl);
			mMemoryController = new MemoryController();
			xmlLoader.start();
			xmlLoader.addEventListener(BulkProgressEvent.COMPLETE, completeXmlHnd);
 
		}		
		/**************************************************************************
 		*  @private 
 		*  Обработка загрузки ХМЛ
 		****************************************************************************/	
 		private function completeXmlHnd(evt: BulkProgressEvent) : void
		{
			theXML = xmlLoader.getXML(xmlUrl);
			totalNum = theXML.file.length();
 
			var t:Number;
 
		 	 for each (var banerUrl:XML in theXML.file) 
			 {                 
                   banerSrcArr.push(new String(banerUrl));
                   t=banerUrl.@time;
                   timersArr.push(t*1000);
                   frameRateArr.push(banerUrl.@speed);                 
             }
 
             Load(0);
 
		}
 
		/**************************************************************************
 		*  @private 
 		*  
 		****************************************************************************/	
        private function Load(inx:Number ) : void
		{   loader = new BulkLoader("test");
			loader.add(banerSrcArr[inx]);
			loader.addEventListener(BulkLoader.COMPLETE, onComplete);
			loader.start();
		}
		 /**************************************************************************
 		*  @private 
 		*  
 		****************************************************************************/
		private function onComplete(evt : BulkProgressEvent) : void
		{   
			currentAVM = loader.getAVM1Movie(banerSrcArr[index], true);
			stage.frameRate = frameRateArr[index];
			bord.addChildAt(currentAVM,0);
			var theTimer:Timer = new Timer(timersArr[index], 1);
			theTimer.addEventListener(TimerEvent.TIMER, timerHnd);
			theTimer.start();
 
		}
		 /**************************************************************************
 		*  @private 
 		*  
 		****************************************************************************/
		private function timerHnd(evt:Event):void
		{		
			bord.removeChild(currentAVM);
			currentAVM = null;
			if(index<=totalNum-2){
			index++;
			}else
			{
			  index=0; 	
			}
			loader.clear();
			loader.removeAll();
			loader = null;
			Load(index);
		}    
	}
}
2. на скриншотах дестени и в альтернативе видел приблуду которая показывает фпс и видимо график используемой памяти. что это такое и как её надыбыть?

3. кто какие приёмы и классы использует для управления памятью ?

Старый 20.12.2008, 02:58
Cobolin вне форума Посмотреть профиль Отправить личное сообщение для Cobolin Найти все сообщения от Cobolin
  № 2  
Ответить с цитированием
Cobolin

Регистрация: May 2008
Сообщений: 20
Код не смотрел, голова квадратная, но могу дать пару общих советов:
- удаляй все что можешь удалить; если Listener не используется делай ему remove;
если ссылка не используется присваивай ей null;
- поиграйся с классом System, там есть такой полезный метод как System.gc(), это форсированный вызов Garbage Collector;

Памятью тут сильно не на управляешь, главное что меньше мемори ликов было, но это уже приходит с практикой. Еще можно использовать мягкие ссылки на объекты, вот почитай тут http://flasher.ru/forum/showthread.php?p=577862 (там внизу)
И вот тут еще почитай http://www.dtf.ru/articles/print.php?id=51967

Еще можно посмотреть в сторону delete
Вот тут приводят интересный трюк http://actionscript-blog.imagination...tion-script-3/

В общем советую познакомится с выше перечисленным и тогда обязательно появятся идеи, а главное это практика практика практика...

Старый 20.12.2008, 12:06
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Я бы не рекомендовал использовать мягкие ссылки.

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

Регистрация: Sep 2008
Адрес: Terra
Сообщений: 64
Отправить сообщение для elmortem с помощью Skype™
__etc
Аргументы?
__________________
Тихо, идёт запись!

Старый 22.12.2008, 03:56
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 5  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
Цитата:
Сообщение от elmortem Посмотреть сообщение
__etc
Аргументы?
возьму на себя смелость, исходя из того что я уже слышал от _итсетера(лень переключаться было, без обид). Я думаю что он имел ввиду, что твердые жесткие или как там они ссылки, приучают тебя за ними следить, а как только ты начнешь пользоваться мягкими, ты можешь к ним привыкнуть и переложить свою работу на мусорщика, который работает по только ему известным законам. А так наверное, более обьективных причин нет, но возможно я ошибаюсь, так что лучше дождись, _итсетера

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

блогер
Регистрация: Jul 2007
Адрес: Russia
Сообщений: 292
Записей в блоге: 5
Никаких мягкостей, только removeEventListener всегда и везде.
__________________
Оптимизация производительности на уровне кода

Старый 22.12.2008, 13:23
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от elmortem Посмотреть сообщение
__etc
Аргументы?
Они частенько бывают очень даже жесткими. К тому же, сам насорил, сам убрал, а не оставляешь это дело ленивой уборщице по имени GC.

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

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

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


 


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


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