ログイン | アカウントの作成
CONTACT | HOME | BBS | Wiki | Blog | Tools |


wikiトップページ

最近更新されたページ
Bit演算比較
型の処理速度比較
Arrayの複製速度比較
PHP Linuxで実行する
flash / Adobe Air
Flash
new Date().getTime速度テスト
派生クラスのアクセス速度
複数のクラスをまたいだパラメーターへのアクセス速度
getter setter 速度比較
型比較の速度比較
Static変数の速度比較
サーバー構築 / CVSサーバー
サーバー構築
サーバー構築 / WebMin
XNA
Array多次元配列の速度比較
オペレーター(加算、減算、積、乗算、余り)の比較
Numberを整数に変換処理比較
flash / jsfl

トップページ / flash / ActionScript / 3.0 / 型の処理速度比較

型の処理速度比較

ActionScript 3.0 の速度の検証をしてみました。 各テストを2000000回 を 10回づつテストして平均値を出してみました。

[加算テスト]
	Boolean                       0.005秒
	Int                           0.005秒
	UInt                          0.006秒
	Number                        0.006秒
	String                        0.533秒
	Array.push(Strng)             0.174秒
	Array[i](Strng)               0.161秒
	Vector.push(Strng)            0.203秒
	Object                        0.345秒

[比較テスト]
	Boolean                       0.019秒
	Int                           0.005秒
	UInt                          0.006秒
	Number(==)                    0.005秒
	Number(<)                     0.005秒
	Number(<=)                    0.005秒
	String                        0.027秒
	Array(String)                 0.024秒
	Vector(String)                0.025秒

[Array.length プロパティーアクセステスト]
	Array(No Length)              0.025秒
	Array(Length)                 0.033秒

[Object プロパティーアクセステスト]
	Object["test"]                0.156秒
	Object.test                   0.142秒

Flash Player 10 で新しく追加された Vecter クラス C#、Javaでいうとこの ジェネリクス型 相当のもの
pushもアクセスも Arrayより遅いという結果になりました。使い方が悪いのかな~
そんなわけないような
Array.length も代入してから使用した方が良いと聞いていたけど
2000000回の割にはそんなに差は無い。
Boolean の比較が 数値系よりも遅い結果におそろしや
数値の比較の【<】【<=】では 【<】の方が早いと聞いた事があったけど
結果は変わらず

予想通り Objectクラスに大量のプロパティーを入れるのは
危険度120%でした。

ご意見はこちらまで

テストに使用したコード

package
{
	import __AS3__.vec.Vector;
	
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.text.TextField;
	
	public class Test_10 extends Sprite
	{
		private var _log:TextField;
		
		public function Test_10()
		{
			this.stage.align = StageAlign.TOP_LEFT;
			this.stage.scaleMode = StageScaleMode.NO_SCALE;
			
			_log = this.addChild(new TextField()) as TextField;
			_log.width = stage.stageWidth;
			_log.height = stage.stageHeight;
			
			var max:uint = 2000000;
			var t:uint;
			var i:uint;
			var time:Number;
			var test_count:int = 10;
			
			var test_bool:Boolean;
			var test_int:int;
			var test_uint:uint;
			var test_number:Number;
			var test_str:String;
			var test_array:Array ;
			var test_array2:Array ;
			var test_vector:Vector.<String>;
			var test_object:Object;
			
			var proc_time:Number = 0;
			var proc_sum_time:Number = 0;
			var result:Array = new Array();
			
			trace2("[Add Test]");
			result.push({title:"Add Test" , time:-1});
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_bool = false ;
				for(i=0; i<max; i++)
				{
					test_bool = true;
				}
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tBoolean\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Boolean" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_int = 0 ;
				for(i=0; i<max; i++)
				{
					test_int += 10;
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tInt\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Int" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_uint = 0 ;
				for(i=0; i<max; i++)
				{
					test_uint += 10;
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tUInt\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"UInt" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_number = 0 ;
				for(i=0; i<max; i++)
				{
					test_number += 10;
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tNumber\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Number" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_str = "" ;
				for(i=0; i<max; i++)
				{
					test_str += "a";
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tString\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"String" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_array =new Array();
				for(i=0; i<max; i++)
				{
					test_array.push("a");
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tArray.push(Strng)\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Array.push(Strng)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_array2 =new Array();
				for(i=0; i<max; i++)
				{
					test_array2[i] = "a";
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tArray[i](Strng)\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Array[i](Strng)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_vector = new Vector.<String>()
				for(i=0; i<max; i++)
				{
					test_vector.push("a");
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tVector.push(Strng)\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Vector.push(Strng)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				test_object = new Object();
				for(i=0; i<max; i++)
				{
					test_object[i] = 10;
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tObject\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"tObject" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			
			trace2("-----------------------------------------------------------");
			
			trace2("[Comparison Test]");
			result.push({title:"Comparison Test" , time:-1});
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_bool == true){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tBoolean\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Boolean" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_int == 1){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tInt\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Int" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_uint == 1){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tUInt\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"UInt" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_number == 1){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tNumber(==)\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Number(==)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_number < 1){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tNumber(<)\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Number(<)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_number <= 1){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tNumber(<=)\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Number(<=)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_str == "a"){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tString\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"String" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_array[i] == "a"){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tArray(String)\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Array(String)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_vector[i] == "a"){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tVector(String)\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Vector(String)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("-----------------------------------------------------------");
			
			trace2("[Array Length Test]");
			result.push({title:"Array Length Test" , time:-1});
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<max; i++)
				{
					if(test_array[i] == "a"){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tArray(No Length)\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Array(No Length)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime(); 
				for(i=0; i<test_array.length; i++)
				{
					if(test_array[i] == "a"){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tArray(Length)\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Array(Length)" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("-----------------------------------------------------------");
			
			trace2("[Object Access Test]");
			result.push({title:"Object Access Test" , time:-1});
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime();
				test_object.test = "a";
				for(i=0; i<max; i++)
				{
					if(test_object["test"] == "a"){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tObject[\"test\"]\t["+t+"]" + proc_time/1000 + "秒");
			}
			
			result.push({title:"Object[\"test\"]" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("\t-----------------------------------------------------------");
			
			for(t = 0; t<test_count; t++)
			{
				time = new Date().getTime();
				test_object.test = "a";
				for(i=0; i<max; i++)
				{
					if(test_object.test == "a"){}
				}
				
				proc_time = (new Date().getTime() - time);
				proc_sum_time += proc_time;
				trace2("\tObject.test\t["+t+"]" + proc_time/1000 + "秒");
			}
			result.push({title:"Object.test" , time:(proc_sum_time / test_count)});
			proc_sum_time = 0;
			
			trace2("-----------------------------------------------------------");
			trace2("| "+ max +"回 テスト結果");
			trace2("-----------------------------------------------------------");
			
			for(i=0; i<result.length; i++)
			{
				if(result[i].time < 0){
					
					trace3("\n[" + result[i].title + "]");
					
				}else{
					
					var out:String = result[i].title;
					
					while(out.length < 30){ out += " "; }
					
					trace3("\t" + out + Math.round(result[i].time)/1000 + "秒")
				}
			}
			
		}
		
		
		private function trace2(msg:String):void
		{
			//_log.appendText( msg + "\n");
			trace(msg);
		}
		
		
		private function trace3(msg:String):void
		{
			_log.appendText( msg + "\n");
			trace(msg);
		}
		

	}
}




CgInstitute のホーム   -    コンタクト   -    CgInstitute について   -    アカウントの作成