Цитата:
Сообщение от Zebestov
Так и сделал перед тем, как написать. Сделал два Loader-а, грузанул картинку в один, по COMPLETE грузанул в другой, кинул оба на экран, диспознул первый, второй остался.
В плане обсуждаемого поведения Loader-а SA проигрыватель и AIR ведут себя одинаково (по крайней мере на мобилах, десктопный AIR я делал пару раз и конкретно с Loader-ом не работал вроде), а FileStream к теме отношения не имеет.
:P
|
Да, признаю, я не прав на счет BtimapData
Кидайте в меня камнями
Сделал вот такой тест
Код AS3:
package {
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.filesystem.File;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.utils.getTimer;
public class URLLoaderTests extends Sprite {
private var _currentUrl: int = 0;
private var _loader: Loader = null;
private var _urls: Vector.<String> = new Vector.<String>();
private var _useSameImages: Boolean = true;
private var _textField: TextField = null;
private var _startTime: int = 0;
private var _operation: String = "";
private const _maxTests: int = 10;
private var _curTest: int = 0;
private var _averageTimeSingle:int = 0;
private var _averageTimeMultiple:int = 0;
public function URLLoaderTests() {
_textField = new TextField();
_textField.width = stage.stageWidth;
_textField.height = stage.stageHeight;
_textField.multiline = true;
_textField.wordWrap = true;
_textField.defaultTextFormat = new TextFormat(null, 20, 0x000000);
_textField.mouseEnabled = true;
addChild(_textField);
getUrls();
useSingleLoader();
//useMultipleLoaders();
}
private function getUrls():void {
_urls.fixed = false;
_urls.length = 0;
var directory:File = File.desktopDirectory.resolvePath("images" + File.separator + (_useSameImages ? "same" : "different"));
var listing:Array = directory.getDirectoryListing();
var totalFileSize:Number = 0;
for each (var file:File in listing) {
_urls.push(file.nativePath);
totalFileSize += file.size;
}
_urls.fixed = true;
log(_useSameImages ? "Используется одинаковая картинка" : "Используются разные картинки");
log("Общий вес файлов в папке: " + Number(totalFileSize / 1024 / 1024).toFixed(2) + " Мб");
log("Средний вес файла: " + Number((totalFileSize / 1024 / 1024) / listing.length).toFixed(2) + " Мб");
log("Запускаемое количество тестов: " + _maxTests + ". Начали! \n");
}
private function useSingleLoader():void {
_operation = _useSameImages ? "Одинаковая картинка (поочередно): " : "Разные картинки (поочередно): ";
_currentUrl = 0;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadSingleComplete);
//log(_operation + " начато");
loadNext(loader);
_startTime = getTimer();
}
private function onLoadSingleComplete(e:Event):void {
_currentUrl++;
var loader:Loader = (e.target as LoaderInfo).loader;
var image:Bitmap = e.target.content as Bitmap;
loadNext(loader);
}
private function loadNext(loader:Loader):void {
if (_currentUrl >= _urls.length) {
if (_curTest < _maxTests) {
_averageTimeSingle += (getTimer() - _startTime);
useSingleLoader();
_curTest++;
} else {
log(_operation + " Среднее время на " + _maxTests + " тестах " + (_averageTimeSingle / _maxTests) + " Мс Завершено! \n");
_curTest = 0;
if (_useSameImages) {
_useSameImages = false;
getUrls();
useSingleLoader();
} else {
_useSameImages = true;
getUrls();
useMultipleLoaders();
}
}
return;
}
loader.load(new URLRequest(_urls[_currentUrl]));
}
private function useMultipleLoaders():void {
_currentUrl = 0;
_operation = _useSameImages ? "Одинаковая картинка (кучей): " : "Разные картинки (кучей): ";
for each (var url:String in _urls) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadMultipleComplete);
loader.load(new URLRequest(url));
}
//log(_operation + " начато");
_startTime = getTimer();
}
private function onLoadMultipleComplete(e:Event):void {
_currentUrl++;
if (_currentUrl >= _urls.length) {
if (_curTest < _maxTests) {
_averageTimeMultiple += (getTimer() - _startTime);
useMultipleLoaders();
_curTest++;
} else {
log(_operation + " Среднее время на " + _maxTests + " тестах " + (_averageTimeMultiple / _maxTests) + " Мс Завершено! \n");
if (_useSameImages) {
_useSameImages = false;
getUrls();
useMultipleLoaders();
}
}
return;
}
}
private function log(string:String):void {
_textField.appendText(string + "\n");
if (_textField.textHeight >= _textField.height) {
_textField.setSelection(_textField.text.length, _textField.text.length);
}
}
}
}
И вот такие получились результаты
Цитата:
Используется одинаковая картинка
Общий вес файлов в папке: 50.54 Мб
Средний вес файла: 1.87 Мб
Запускаемое количество тестов: 10. Начали!
Одинаковая картинка (поочередно): Среднее время на 10 тестах 962.1 Мс Завершено!
Используются разные картинки
Общий вес файлов в папке: 49.79 Мб
Средний вес файла: 1.35 Мб
Запускаемое количество тестов: 10. Начали!
Разные картинки (поочередно): Среднее время на 10 тестах 2253.1 Мс Завершено!
Используется одинаковая картинка
Общий вес файлов в папке: 50.54 Мб
Средний вес файла: 1.87 Мб
Запускаемое количество тестов: 10. Начали!
Одинаковая картинка (кучей): Среднее время на 10 тестах 282.7 Мс Завершено!
Используются разные картинки
Общий вес файлов в папке: 49.79 Мб
Средний вес файла: 1.35 Мб
Запускаемое количество тестов: 10. Начали!
Разные картинки (кучей): Среднее время на 10 тестах 282.7 Мс Завершено!
|