Home > ActionScript 3.0 | Flash > AS3.0 配列あれこれ

AS3.0 配列あれこれ

ついさっき何かとお世話になる配列についていろいろ調べてました
せっかくなのでここにまとめておきます。
相変わらず、アウトプットとかが全然ない地味な検証系blogだww
しかもJS書く人ならだいたい知ってそうなノウハウという・・・

まあ、というわけで久々の記事でございます。

◆ 生成速度


実は new Array() するよりも [] のほうが3倍速い
型とか、挙動に差があると思ったら全くない(検証した範囲内では)

◆ push


push するより array[array.length] = value; のほうが10〜20%早い
ちなみにVectorでもこの記述方式が 10〜20%早い
(1000000アイテムの追加で検証)

あと Array と Vector のpush実行の差は約20% Vector が早いです。

◆ 配列へのアクセス


配列のアクセス方法は多々あり悩みますが
結論から言うと速度は

for > for each > while > for( key in arr ) > forEach > map

となりました。その速度は1000000アイテムの処理に対して平均

50ms, 65ms, 95ms, 100ms, 140ms, 195ms

となりました。(PCの環境によっては若干の違いがあるかもしれません)

また、Vector に関しては以下の順で早いです。

for > while > for( key in vec ) > forEach > map

その速度は1000000アイテムの処理に対して平均

20ms, 90ms, 90ms, 140ms, 320ms

となり、Vectorのmap関数は相当おそいという事になります。
にしてもfor文だけで比べた場合、やはりVectorは早いですね。

あと、細かい話ですが配列へ for文 でアクセスする際に 結構こう書いちゃう人が居たりします。
for( var i:uint = 0; i < arr.length; i++ ){
    arr[i] = ....;
}

こう書くと、 i < arr.length のと記述すると、 for文内が1度処理されるたびに
arr.length を調べるためかなり無駄が多いです。
面倒でも、以下のように記述する事をお勧めします。
var len:uint = arr.length;
for( var i:uint = 0; i < len; i++ ){
    arr[i] = ....;
}

ちなみに速度差は Array で2倍、Vector だと4倍違います。
けっこうでかいので、大きな配列をまわすときは注意です。

◆ おまけ


文字列連結も、+ 使うより、配列使う方が若干速いです。
var str:String = [
   "hoge","fuga",............,"nemui"
].join(""); 

みたいな書き方です。まあ本当に若干ですけども。

◆ まとめ


まあここら辺に書いた事って、今くらいのPCスペックになると
気にするほどの事じゃないんですが、でもちょっとえぐい処理をやろうとすると
やはり細かな事の積み重ねで、パフォーマンスが変わるので
覚えておいて損はないかと。あと、やっぱ Vector 速いね


さて、今日はこの辺で。

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/53
Listed below are links to weblogs that reference
AS3.0 配列あれこれ from flair4 blog

Home > ActionScript 3.0 | Flash > AS3.0 配列あれこれ

Search
Feeds

Return to page top