パフォーマンステスト

ActionScript // 2009年03月08日 - 21:42

繰り返し処理にはいろんな方法がある。おなじみのfor文から、for each..in文、while文など。配列から値を取り出して何かやる場合、どんな方法が一番速いんだろう?と思ってやってみた。

処理の内容は
1) 0~9999までの数値を配列にプッシュ。10000個の要素を持った配列ができる。
2) 配列の中身を順に取り出して、テキスト出力する。
3) すべての要素を出力したら終了。
これをそれぞれやり方を変えて3回測定する。

前処理

var array:Array = new Array();
for (var i:int = 0; i < 10000; i++ )
{
  array.push(i);
}

速度テスト

[1]for文:いつものパターン

for ( var j:int = 0; j < array.length; j++ )
{
  textarea.appendText(array[j] + "\n");
}

結果:
1回目測定:17.772秒
2回目測定:18.696秒
3回目測定:18.474秒
平均:18.314秒

[2]for文:IE+JSだと効果のあるパターン

for ( var j:int = 0; j < array.length; j++ )
{
  var num:int = array[j];
  textarea.appendText(num + "\n");
}

結果:
1回目測定:17.855秒
2回目測定:18.067秒
3回目測定:18.342秒
平均:18.088秒

[3]for文:lengthをあらかじめ変数に格納しておくパターン

for ( var j:int = 0,len:int = array.length; j < len; j++ )
{
  var num:int = array[j];
  textarea.appendText(num + "\n");
}

結果:
1回目測定:18.009秒
2回目測定:18.526秒
3回目測定:18.473秒
平均:18.336秒

[4]for each..in文

for each(var str:int in array)
{
  textarea.appendText(str + "\n");
}

結果:
1回目測定:18.067秒
2回目測定:18.726秒
3回目測定:18.579秒
平均:18.457秒

[5]while文

var j:int = 0;
while (j < array.length)
{
  textarea.appendText(array[j] + "\n");
  j++;
}

結果:
1回目測定:18.226秒
2回目測定:18.652秒
3回目測定:18.623秒
平均:18.500秒

平均値

[1]18.314秒
[2]18.088秒
[3]18.336秒
[4]18.457秒
[5]18.500秒

結果としては[2]for文:IE+JSだと効果のあるパターンが一番速かった。ただ、一番遅かった[5]while文との差はわずか0.412秒しかなく、PCのヘルス状態にも左右されるためこれは誤差範囲なのかも。まぁ、最終的な結果としてはどれも変わらないといったところで、「慣れたやり方でできる」のが結論といったところでしょう。ちなみに今回はFlash Player 10.0 r12でテストしました。

コメント

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)