![]() |
|
||||||||||
|
|||||
|
Цитата:
А вообще думал что Вы имели ввиду что плохо повторное использование лоадеров.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
На самом деле здесь вряд ли запихивание лоадеров в пул что-то даст
(раз в 10 секунд!, если бы 10 раз в секунду было - и то мало - сам по себе URLLoader весит очень мало - память забивают загружаемые данные) Если у данных есть тяжелый контейнер - можно попробовать переиспользовать его, но что-то сомневаюсь. Т.е. забить - не самый плохой вариант - при нехватке памяти она очистится. Однако, как сделать пул лоадеров (не тестировал): 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; } } т.е. пулы применяются для объектов, создается которых много, а одновременно используется мало, и, главное, нужно знать, когда объект будет не нужен, т.е. когда вызывать "disposeLoader", ну и нужна возможность переиспользования (тяжело использовать битмапдату, которую достал из пула, если она неподходящего размера). Последний раз редактировалось expl; 09.11.2010 в 22:06. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|