forked from: 【検証テスト】配列へのアクセスはデータ型を指定で高速化される?
forked from 【検証テスト】配列へのアクセスはデータ型を指定で高速化される? (diff: 25)
配列にアクセスする時はデータ型を指定する事でアクセスが高速化される 情報元 http://www.as-game.net/category/4265609-1.html 全然早くならないけどなにか間違ってるのだろうか、、、 要素のメンバにアクセスするときは*型よりPoint型でアクセスした方が * 速いってことかな。
ActionScript3 source code
/**
* Copyright coppieee ( http://wonderfl.net/user/coppieee )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/dTPM
*/
// forked from yooKo's 【検証テスト】配列へのアクセスはデータ型を指定で高速化される?
// forked from yooKo's 【検証テスト】配列を一度空にして何度も生成する
// forked from alumican_net's Point.distance
//
// 配列にアクセスする時はデータ型を指定する事でアクセスが高速化される
// 情報元 http://www.as-game.net/category/4265609-1.html
//
// 全然早くならないけどなにか間違ってるのだろうか、、、
/**
* 要素のメンバにアクセスするときは*型よりPoint型でアクセスした方が
* 速いってことかな。
*/
package {
import flash.display.*;
import flash.geom.Point;
import flash.text.*;
import flash.utils.*;
public class Main extends Sprite {
private var _array:Array = [];
//----------------------------------*
// Constractor
//----------------------------------*
public function Main():void {
//-------- max number ------------------*
var n:uint = 10000;
for(var i:uint = 0; i < n; ++i) {
_array.push(new Point((Math.random() - 0.5) * 1000,(Math.random() - 0.5) * 1000));
}
_setup();
//-------- Array test1 ------------------*
_measure("var temp:Point = Array[i];temp.x", function ():void {
for(var i:uint = 0; i < n; ++i) {
var temp:Point = _array[i];
temp.x;
}
}, 100, _array);
//-------- Array test2 ------------------*
_measure("Array[i].x", function ():void {
for(var i:uint = 0; i < n; ++i) {
_array[i].x;
}
}, 100, _array);
//-------- Array test3 ------------------*
_measure("(Array[i] as Point).x", function ():void {
for(var i:uint = 0; i < n; ++i) {
(_array[i] as Point).x;
}
}, 100, _array);
//-------- Array test4 ------------------*
_measure("Point(Array[i]).x", function ():void {
for(var i:uint = 0; i < n; ++i) {
Point(_array[i]).x;
}
}, 100, _array);
}
//----------------------------------*
// measure
//----------------------------------*
private function _measure(title:String, func:Function, numTimes:uint, array:Array, ...params):void {
_time = getTimer();
for (var i:int = 0; i < numTimes; i++) {
func.apply(null, params);
}
_time = getTimer() - _time;
_debug("[ " + title + " ] " + "Array.length = " + array.length + " --> " + _time + " ms");
}
//----------------------------------*
// debug
//----------------------------------*
private function _debug(log:String):void {
_field.appendText(log + "\n");
}
//----------------------------------*
// Text
//----------------------------------*
private var _field:TextField;
private var _time:uint;
private function _setup():void {
_field = new TextField();
_field.width = stage.stageWidth;
_field.height = stage.stageHeight;
var format:TextFormat = _field.defaultTextFormat;
format.font = "_sans";
_field.defaultTextFormat = format;
addChild(_field);
}
}
}
