Просмотр полной версии : Понизить приоритет фоновой загрузки?
mikhailk
26.04.2012, 13:30
Перед открытием локации подкачиваются растровые данные для базовой анимации объектов на локации (условно - 200кб). После открытия локации в фоновом режиме подкачиваются растровые данные для расширенной анимации (приблизительно 700-1000кб). Подкачиваются - это значит, что загружаются изображения (10-20кб каждое) и на их основе создаются массивы битмапдат, которые составляют покадровую анимацию объектов по фазам.
Вопрос - можно ли как-то снизить нагрузку на плеер в момент этой загрузки расширенной анимации? Там, конечно, копейки, но на слабых машинах все равно немного чувствуется.
Первая мысль, которая мне приходит в голову - это грузить не непрерывным потоком, а с некоторым таймаутом перед запросом следующего изображения. Например, 1000мс.
Вторая мысль - это сделать в подрузчике старт-стопный механизм, отслеживать запуск ресурсозатратных операций и на этот период останавливать подгрузку, а затем возобновлять (можно, конечно, просто на ФПС повеситься, но практика показывает, что это не надежно).
ЗЫ. Необходимости подгрузить срочно нет. Есть необходимость подгрузить незаметно.
Возможно, тормоза создает больше не загрузка, а раскодирование. Попробовать грузить изображения урллоадером, а раскодировать и создавать битмапы потом.
Возможно тормоза из-за большого количества одновременных загрузок? Может попробовать грузить небольшими партиями 5-7 штук?
mikhailk
26.04.2012, 15:14
Нет, там конвейер, грузим в один поток.
Грузим изображение, когда загрузилось - пишем в битмапу и начинаем следующую загрузку.
Насчет раскодирования - не знаю. Я ничего специально не делаю (в смысле, ничего дополнительного не создаю - беру то, что лежит в лоадере):
private static function onCurrentImageLoaded(e:Event) : void
{
var image:Bitmap = Bitmap(loader.content);
var bitmapData:BitmapData = image.bitmapData;
currentPhaseImages[currentImageIndex] = bitmapData;
currentImageIndex++;
if (currentImageIndex < objectsForLoading.length) loadNextImage();
else onCurrentPhaseLoaded();
}
Грузятся, кстати, png-шки с альфой.
и на их основе создаются массивы битмапдат
Расфасовку массивов делать в несколько подходов ? Сама загрузка тормозить не должна.
mikhailk
26.04.2012, 15:34
А собственно, никакой расфасовки-то нет.
Все происходит в той функции, код которой я привел (onCurrentImageLoaded).
Когда все изображения фазы загружены, массив currentPhaseImages передается на хранение, а для загрузки следующей фазы создается новый массив.
K.A.T.A.F.A.L.K.E.R
26.04.2012, 15:42
ImageDecodingPolicy смотрели?
mikhailk
26.04.2012, 15:50
ImageDecodingPolicy смотрели?
Нет. :)
Ну да, у меня стоит по умолчанию ON_LOAD.
Можно, конечно, поставить ON_DEMAND, но мне это ничего не даст - он же все равно отработает, когда я полезу в loader.content.
Разве что это позволит развести два процесса - загрузки и декодирования...
Но если я запущу массовое декодирование - получатся те же тормоза, вид сбоку.
Ну я в общем про декодирование писал.
Возможно, есть более подходящее время для тормозов у вас, ну там собсно при открытии локации например.
mikhailk
26.04.2012, 16:16
Возможно, есть более подходящее время для тормозов у вас, ну там собсно при открытии локации например.
Ха, так именно за время открытия локации борьба и идет.
Для меня было идеально, когда вся анимация закачивалась полностью в момент открытия локации.
Но, в принципе, всем спасибо. причины понятны. Видимо, просто добавлю таймаут при загрузке, тормоза будут разнесены по времени и не так заметны.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.