ループ文速度比較
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秒
この書き方がシンプルで好き。
早くて良かった。
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() ) );