ループ文速度比較


ActionScriptでのループ文、
皆さんはどのように書きますか?

for文、while分、Iterator走査、
配列のループ速度を試してみました。




今回おこなってみたのは、10万の数字要素を持つ配列を
一個一個トレースさせるベンチマークテストです。



その一、For文でループ

//my_arrは配列
for( var i:Number=0 ; i

処理時間 : 3.660秒




その二、while文でループ

//my_arrは配列
var i:Number = my_arr.length;
while( i-- )
{
	trace( my_arr[ i ] );
}

処理時間 : 3.287秒
この書き方がシンプルで好き。
早くて良かった。





その三、デザインパターン(Iterator)で走査

import com.clockmaker.utils.*; //イテレータクラスをインポート
var iterator:Iterator = new ArrayIterator( my_arr );
while( iterator.hasNext() )
{
	trace( iterator.next() );
}

処理時間 : 8.450


えっ、Iteratorって使い物にならないじゃんw


上の二つと比べて遅くなることは分かっていましたが、
こんなに結果が開くなんてあんまりでした。

カッコつけて今までOOPといってIteratorを使ってきましたが、
速度の遅いASでIteratorは無理があったようです。。

Flashではスムーズな操作感を大切にしたいので
これからはあまり無理はさせないようにします。




(参考)ベンチテストで使ったコード

var my_arr:Array = [];
for( var n=0; n<100000; n++)
	my_arr.push( Math.random()*1000 );

var start_date:Date = new Date();
	
//ここに比較する配列のループ文を記述===================== s

var i:Number = my_arr.length;
while( i-- )
{
	trace( my_arr[ i ] );
}

//========================================== e

var end_date:Date = new Date();
trace( "処理時間 : " + ( end_date.getTime() - start_date.getTime() ) );