Vector型の二次元配列はArray型の二次元配列よりも遅い? 2

by necoEngine
参照する処理のとこだけで計測
♥0 | Line 94 | Modified 2011-04-18 15:26:27 | MIT License
play

ActionScript3 source code

/**
 * Copyright necoEngine ( http://wonderfl.net/user/necoEngine )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/pEgn
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.utils.getTimer;
    
    
    public class FlashTest extends Sprite {
        public function FlashTest() {
            /**
             * コンストラクタが重いのかしら。
             * 参照する部分のみを計測。
             **/
            
            var n0:uint;
            var n1:uint = 2500;
            var n2:uint = 4000; 
            var i:uint, j:uint;
            var arrayA:Array = new Array();
            var arrayB:Array = new Array();
            var vecA:Vector.<Vector.<uint>> = new Vector.<Vector.<uint>>();
            var vecB:Vector.<uint> = new Vector.<uint>();
            var vecC:Vector.<Vector.<uint>>;
            var vecD:Vector.<uint>;
            var a:uint = 0, b:uint = 0, c:uint, d:uint;
            var startTime:uint;
            var lap:uint;
            
            var myText:TextField = new TextField();
            addChild(myText);
            myText.width  = 600;
            myText.height = 300;
            
            // Array A
            for (i = 0; i < n1; i++) {
                arrayA.push(new Array());
                for (j = 0; j < n2; j++) {
                    n0 = i * n2 + j;
                    arrayA[i].push(n0);
                }
            }
            startTime = getTimer();
            for (i = 0; i < n1; i++) {
            for (j = 0; j < n2; j++) {
                a += arrayA[i][j];
            }
            }
            lap = getTimer() - startTime;
            myText.text = "Array 二次元: " + lap.toString();
            
            // Array B
            n0 = n1 * n2;
            for (i = 0; i < n0; i++) arrayB.push(i);
            startTime = getTimer();
            for (i = 0; i < n0; i++) b += arrayB[i];
            lap = getTimer() - startTime;
            myText.text = myText.text + "\nArray 一次元: " + lap.toString();
            
            // Vector A
            for (i = 0; i < n1; i++) {
                vecA.push(new Vector.<uint>());
                for (j = 0; j < n2; j++) {
                    n0 = i * n2 + j;
                    vecA[i].push(n0);
                }
            }
            startTime = getTimer();
            for (i = 0; i < n1; i++) {
                for (j = 0; j < n2; j++) {
                    c += vecA[i][j];
                }
            }
            lap = getTimer() - startTime;
            myText.text = myText.text + "\nVector 二次元: " + lap.toString();
            
            // Vector B
            n0 = n1 * n2;
            for (i = 0; i < n0; i++) vecB.push(i);
            startTime = getTimer();
            for (i = 0; i < n0; i++) d += vecB[i];
            lap = getTimer() - startTime;
            myText.text = myText.text + "\nVector 一次元: " + lap.toString();
            
            // Vector C Fixed
            vecC = new Vector.<Vector.<uint>>(n1, true);
            c = 0;
            for (i = 0; i < n1; i++) {
                vecC[i] = new Vector.<uint>(n2, true);
                for (j = 0; j < n2; j++) {
                    n0 = i * n2 + j;
                    vecC[i][j] = n0;
                }
            }
            startTime = getTimer();
            for (i = 0; i < n1; i++) {
            for (j = 0; j < n2; j++) {
                c += vecC[i][j];
            }
            }
            lap = getTimer() - startTime;
            myText.text = myText.text + "\nVector 二次元 配列長固定: " + lap.toString();
            
            // Vector D Fixed
            n0 = n1 * n2;
            vecD = new Vector.<uint>(n0, true);
            d = 0;
            for (i = 0; i < n0; i++) vecD[i] = i;
            startTime = getTimer();
            for (i = 0; i < n0; i++) d += vecD[i];
            lap = getTimer() - startTime;
            myText.text = myText.text + "\nVector 一次元 配列長固定: " + lap.toString();
        }
    }
}