最近のトラックバック

スポンサード リンク


  • Google
    Web sketch.txt-nifty.com

リンク

« FlMML - バッファリング・ファミコン音源・ゲームボーイ ノイズ | トップページ | I Hate This Place »

ActionScript日記 - 高速化についてまた調べてみた

 久しぶりにActionScriptの高速化について調べてみました。
 前回は一年以上前かー。

 ArrayからVectorに変えたときの負荷を調べてなかったので、まずはそこから。
 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.
ByteArray1963msec.
Array1973msec.

 やっぱり 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」カテゴリの記事

コメント

関数は10倍も違ってくるんですね
勉強になりました!

よく考えるとデバッグ版のPlayer使ってるので、余計に遅くなっちゃってる部分もあるかもしれないんですねー。

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ActionScript日記 - 高速化についてまた調べてみた:

« FlMML - バッファリング・ファミコン音源・ゲームボーイ ノイズ | トップページ | I Hate This Place »

ブログパーツ



2021年7月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
無料ブログはココログ