|
|
型の処理速度比較Table Index
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でいうとこの ジェネリクス型 相当のもの 予想通り Objectクラスに大量のプロパティーを入れるのは テストに使用したコード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);
}
}
}
|