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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.11.2010, 17:04
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 11  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Сообщение от random13 Посмотреть сообщение
а что хорошего в слабых ссылках, на сколько я знаю лучше все предварительно подчистить за собой чтоб объект удалился
Порой они нужны.

А вообще думал что Вы имели ввиду что плохо повторное использование лоадеров.

Старый 09.11.2010, 18:15
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 12  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
неее как раз повторное использование это очень даже правильно, сам активно использую пул
__________________
Коллекционирую чужие ActionScript Блоги

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
На самом деле здесь вряд ли запихивание лоадеров в пул что-то даст
(раз в 10 секунд!, если бы 10 раз в секунду было - и то мало - сам по себе URLLoader весит очень мало - память забивают загружаемые данные)

Если у данных есть тяжелый контейнер - можно попробовать переиспользовать его, но что-то сомневаюсь.

Т.е. забить - не самый плохой вариант - при нехватке памяти она очистится.

Однако, как сделать пул лоадеров (не тестировал):
Код AS3:
        public class NameClass
	{
                private var _loaders:Array = [];
 
                private function getLoader():URLLoader
                {
                       if (_loaders.length > 0) return _loader.pop();
                       return new URLLoader();
                }
 
                private function disposeLoader(loader:URLLoader):void
                {
                       _loaders.push(loader);
                }
 
		private var variables:URLVariables;
		private var urlRequest:URLRequest;
		private var loader:URLLoader;
 
		private var timer:Timer  = new Timer(10000, 0);
 
		private var error:String;
 
		public function NameClass() 
		{
			timer.addEventListener(TimerEvent.TIMER, request);
			timer.start();
		}
 
		public function stop():void {
			timer.stop();
		}
		public function start():void {
			timer.start();
		}
 
		public function get error1():String {
			return error;
		}
		private function request(e:TimerEvent):void {
			variables = new URLVariables();// <- создание объекта, но он не тяжелее лоадера
			variables.md5 = MD5.hash("SomeString");
                                  variables.data = "data";// <- может здесь как раз и передаются большие объемы, но как их повторно использовать?
 
			urlRequest = new URLRequest("http://192.168.10.50/test.php");//<- еще один создающийся объект, а мы все на лоадере экнономим
			urlRequest.data = variables;
			urlRequest.method = URLRequestMethod.POST
 
			loader = getLoader();// Достаем из пула
 
			loader.addEventListener(Event.COMPLETE, update);
			loader.addEventListener(IOErrorEvent.IO_ERROR, io_error);
 
			try {
				loader.load(urlRequest);
			}
			catch (error:Error) {
				loader.removeEventListener(Event.COMPLETE, update);
				loader.removeEventListener(IOErrorEvent.IO_ERROR, io_error);
			}
		}
 
		private function update(e:Event):void {
			loader.removeEventListener(Event.COMPLETE, update);
			loader.removeEventListener(IOErrorEvent.IO_ERROR, io_error);
			//Обработка <-- вот здесь мы достаем, наверное, самые тяжелые и забивающие память данные, но для них нет повторно исп. контейнера
                        disposeLoader(loader);//ложим обратно в пул
		}
 
		private function io_error(e:IOErrorEvent):void {
			e.currentTarget.removeEventListener(Event.COMPLETE, update);
			e.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, io_error);
			error = "Ошибка I/O";
			this.stop();		
 
                        // Все! кина не будет - рубим ссылки на лоадер(ы) в пуле
                        _loaders.length = 0;
		}
	}
Пулы хорошо себя показываются на работе с BitmapData, например Вы тупо чтобы обработать графику создаете кучу битмап дат одинакового размера, время жизни которых - только время обработки - вот их лучше брать из пула, тогда вместо 100 будет созданно, например 5,
т.е. пулы применяются для объектов, создается которых много, а одновременно используется мало, и, главное, нужно знать, когда объект будет не нужен, т.е. когда вызывать "disposeLoader", ну и нужна возможность переиспользования (тяжело использовать битмапдату, которую достал из пула, если она неподходящего размера).


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

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

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


 


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


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