FlashPlayer10でのArrayとVector速度比較

FlashPlayer10用の開発環境を作ってみました。教科書はTargeting Flash Player 10 Beta with Flex SDK 3.0.x via haru-komugiさん

野良Flasherに関係あるのはFirst Things Firstと、Command-line Compierだけです。Flex Builderなんて知らない。念のためflex-config.xmlflex-config-for-fp9.xmlにコピーしてから、FlashPlayer10向けに改変しました。新しいほうのflexsdk/binにパスを通してバージョン確認してみたところ、

C:\flex_sdk_3.0.1.1739\sandbox>mxmlc -version
Version 3.0.0 build 1739

うーん、間違ってないんだろうか……。と思いつつはるこむぎさんのところにあった3Dサンプルをコンパイル。間違っていないようです。ついでに下記のようなVectorジェネリクス)使ったプログラムもコンパイル通りました。

var v:Vector.<String> = new Vector.<String>();
v.push("ほげほげ");

おもしろいおもしろい。ついでに、VectorとArrayでどのぐらい速度が違うのか試してみました。下記の結果はArray使用→Vector使用です。

  • 0から1000万までのintをpush: 1375ms → 937ms
  • pushした値をfor文で回して加算: 4187ms → 188ms
  • pushした値を全てpop: 406ms → 250ms

Vector.でしか試していないですが、要素の参照で特に速度がものすごく違うようです。push, popは、まぁ別に。Vector.の実装が特殊化されているからこんなに速度差が出るのかもしれないですね。