Тема: XML и Embed
Показать сообщение отдельно
Старый 08.08.2011, 09:24
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Не заметил таких фатальных провалов.
Вот результат:
Код:
[ 1] Player: [WIN 10.3.181.34 RELEASE]
[ 2] 
[ 3] Test started..
[ 4] get xml var 1 time : 13494
[ 5] get xml var 2 time : 13634
[ 6] get xml var 3 time : 10530
[ 7] Test finished.
[ 8] 
[ 9] Test started..
[10] get xml var 1 time : 13759
[11] get xml var 2 time : 14040
[12] get xml var 3 time : 10593
[13] Test finished.
[14] 
[15] Test started..
[16] get xml var 1 time : 13962
[17] get xml var 2 time : 14306
[18] get xml var 3 time : 10889
[19] Test finished.
[20] 
[21] Test started..
[22] get xml var 1 time : 13994
[23] get xml var 2 time : 14086
[24] get xml var 3 time : 10624
[25] Test finished.
Вот тест:
Код AS3:
/**																		
 * File created: '08.08.2011 8:11 AM'								
 *																	
 * @author i.o.														
 * @version 1.0														
 */
 
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.system.Capabilities;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.utils.ByteArray;
	import flash.utils.getTimer;
 
	[SWF(width='800', height='600', scriptTimeLimit='300')]
	public class XmlCreationTest extends Sprite 
	{
		[Embed(source = "example.xml", mimeType="application/octet-stream")]
		private static const EXAMPLE_XML_ASSET : Class;
		private static const EXAMPLE_XML_STRING : String = ((new EXAMPLE_XML_ASSET() as ByteArray).readUTFBytes((new EXAMPLE_XML_ASSET() as ByteArray).length));
 
 
		public function XmlCreationTest() 
		{
			if (stage)
				this._init();
			else
				this.addEventListener(Event.ADDED_TO_STAGE, this._init);
		}
 
 
		///
		private var _txtLog : TextField;
		///
		private var _logMsgCount : uint = 0;
		///
		private var _logMsgCountCharWidth : uint = 2;
 
 
		///
		public function log( msg:String="" ) : void 
		{
			this._logMsgCount++;
 
			var count:String = "    " + this._logMsgCount.toString();
			count = count.substr(count.length - this._logMsgCountCharWidth, this._logMsgCountCharWidth);
 
			this._txtLog.appendText((this._logMsgCount > 1 ? "\n" : "") + "[" + count + "] " + msg);
		}
 
		///
		private function _init( e:Event=null ) : void 
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, this._init);
			// entry point
 
			this.stage.addEventListener(MouseEvent.CLICK, this._test);
 
			var tf:TextFormat = new TextFormat("Courier New", 11);
			this._txtLog = new TextField();
			this._txtLog.x = 10.0;
			this._txtLog.y = 30.0;
			this._txtLog.width = 800.0 - 20;
			this._txtLog.height = 600.0 - 40;
			this._txtLog.border = true;
			this._txtLog.defaultTextFormat = tf;
			this._txtLog.setTextFormat( tf );
			this.addChild( this._txtLog );
 
			tf = new TextFormat("Arial", 16, 0xFF0000, true, true);
			var txtHeader:TextField = new TextField();
			txtHeader.x = 10.0;
			txtHeader.y = 3.0;
			txtHeader.width = 800.0 - 20;
			txtHeader.height = 30;
			txtHeader.defaultTextFormat = tf;
			txtHeader.setTextFormat( tf );
			txtHeader.text = "Click on screen to start a test.";
			this.addChild( txtHeader );
 
			var playerVersion:String = Capabilities.version.replace(/,/g, '.');
			var playerKind:String = Capabilities.isDebugger ? "DEBUG" : "RELEASE";
			var playerInfo:String = "[" + playerVersion + " " + playerKind + "]";
 
			txtHeader.appendText("  " + playerInfo);
			log("Player: " + playerInfo );
 
			this._test();
		}
 
		///
		private function _test( ...args ) : void 
		{
			log();
			log("Test started..");
 
			var start   : Number;
			var now     : Number;
			var counter : int;
			var targetLoops:int = 10000;
 
			// test 1
			start = getTimer();
			for(counter = 0; counter < targetLoops; counter++)
				getXML_1();
			now = getTimer();
			log("get xml var 1 time : " + (now - start));
 
			// test 2
			start = getTimer();
			for(counter = 0; counter < targetLoops; counter++)
				getXML_2();  
			now = getTimer();
			log("get xml var 2 time : " + (now - start));
 
			// test 3
			start = getTimer();
			for(counter = 0; counter < targetLoops; counter++)
				getXML_3();  
			now = getTimer();
			log("get xml var 3 time : " + (now - start));
 
			log("Test finished.");
		}
 
		///
		private function getXML_1() : XML
		{
		  return XML(new String(new EXAMPLE_XML_ASSET()));  
		}
 
		///
		private function getXML_2() : XML
		{
		  var file : ByteArray = new EXAMPLE_XML_ASSET(); 
		  var str  : String = file.readUTFBytes( file.length );
		  var xml  : XML = new XML( str );      
		  return xml;
		}
 
		///
		private function getXML_3() : XML
		{
		  return new XML(EXAMPLE_XML_STRING);  
		}
 
	}
 
}
Вот XML:
example.rar