ActionScript日記 - 高速化についてまた調べてみた
ArrayからVectorに変えたときの負荷を調べてなかったので、まずはそこから。
Vector.<int>、Vector.<Number>、ByteArray、Arrayそれぞれに対して大量の足し算を行なってみました。
こんな感じ。
やっぱり Vector.<int>が最速ですね。
つかByteArray遅いなー。
次に関数呼び出しの負荷について。
ループの中で関数を呼び出した場合と、直接書いた場合で比較してみました。
結果。
関数おそーっ!
勉強になったのでFlMMLに活かしたいと思います。
おわり。
検証に使ったコードはこんな感じです。
Vector.<int>、Vector.<Number>、ByteArray、Arrayそれぞれに対して大量の足し算を行なってみました。
こんな感じ。
private function func():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { vec[i] += vec[i]; } }結果。
Vector.<int> | 430msec. |
Vector.<Number> | 591msec. |
ByteArray | 1963msec. |
Array | 1973msec. |
やっぱり Vector.<int>が最速ですね。
つかByteArray遅いなー。
次に関数呼び出しの負荷について。
ループの中で関数を呼び出した場合と、直接書いた場合で比較してみました。
private function fnc(n:int):int { return n; } private function funcFnc():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { intvec[i] = fnc(i); } } private function funcInl():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { intvec[i] = i; } }
結果。
関数 | 2083msec. |
インライン | 230msec. |
関数おそーっ!
勉強になったのでFlMMLに活かしたいと思います。
おわり。
検証に使ったコードはこんな感じです。
package { import flash.display.*; import flash.utils.*; public class Bench extends Sprite { private static const SIZE:int = 10000000; private var intvec:Vector.<int> = new Vector.<int>(SIZE, true); private var numvec:Vector.<Number> = new Vector.<Number>(SIZE, true); private var bytarr:ByteArray = new ByteArray(); private var narray:Array = new Array(SIZE); private static var stavec:Vector.<int> = new Vector.<int>(SIZE, true); private function funcInt():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { intvec[i] += intvec[i]; } } private function funcSta():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { stavec[i] += stavec[i]; } } private function funcNum():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { numvec[i] += numvec[i]; } } private function funcByt():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { bytarr[i] += bytarr[i]; } } private function funcArr():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { narray[i] += narray[i]; } } private function fnc(n:int):int { return n; } private function funcFnc():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { intvec[i] = fnc(i); } } private function funcInl():void { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { intvec[i] = i; } } public function Bench() { var n:int = SIZE; var i:int; for(i = n-1; i >= 0; i--) { intvec[i] = 1; numvec[i] = 1; bytarr[i] = 1; narray[i] = 1; } bench(funcInt, "int"); bench(funcSta, "sta"); bench(funcNum, "num"); bench(funcByt, "byt"); bench(funcArr, "Arr"); bench(funcFnc, "fnc"); bench(funcInl, "inl"); } public function bench(func:Function, str:String):void { var starttime:Date = new Date(); func(); var endtime:Date = new Date(); trace(str + ": " + (endtime.getTime() - starttime.getTime()) + "msec."); } } }
« FlMML - バッファリング・ファミコン音源・ゲームボーイ ノイズ | トップページ | I Hate This Place »
「ActionScript 3.0」カテゴリの記事
- FlMML - リングモジュレーターとSync(2009.07.26)
- FlMML - ファミコンDPCM(2009.05.16)
- キー入力のレベル、トリガ、リピートを取得(2009.05.06)
- FlMML - エクスプレッション(2009.05.03)
- FlMML - 引数つきマクロ(2009.04.12)
コメント
この記事へのコメントは終了しました。
« FlMML - バッファリング・ファミコン音源・ゲームボーイ ノイズ | トップページ | I Hate This Place »
関数は10倍も違ってくるんですね
勉強になりました!
投稿: d | 2009.06.01 21:33
よく考えるとデバッグ版のPlayer使ってるので、余計に遅くなっちゃってる部分もあるかもしれないんですねー。
投稿: おー | 2009.06.06 08:22