Array,Vector,Vector3D速度比較 for,for in,for each,forEach速度比較
- package
- {
- import flash.display.Sprite;
- import flash.text.TextField;
- import flash.geom.Point;
- import flash.utils.getTimer;
- public class test extends Sprite
- {
- private var array:Array = new Array();
- private var vector:Vector.<Point> = new Vector.<Point>();
- public function test()
- {
- var text_field:TextField = new TextField();
- text_field.width = stage.stageWidth;
- text_field.height = stage.stageHeight;
- stage.addChild(text_field);
- for(var i:int = 0; i < 250000; i++)
- {
- array.push(new Point());
- vector.push(new Point());
- }
- var _str:String = new String();
- _str += "Array for:" + benchMarkj(a1) + "\r";
- _str += "Array for in:" + benchMarkj(a2) + "\r";
- _str += "Array for each:" + benchMarkj(a3) + "\r";
- _str += "Array forEach1:" + benchMarkj(a4) + "\r";
- _str += "Array forEach2:" + benchMarkj(a5) + "\r";
- _str += array[0].x + "\r";
- _str += "Vector for:" + benchMarkj(v1) + "\r";
- _str += "Vector for in:" + benchMarkj(v2) + "\r";
- _str += "Vector for each:" + benchMarkj(v3) + "\r";
- _str += "Vector forEach1:" + benchMarkj(v4) + "\r";
- _str += "Vector forEach2:" + benchMarkj(v5) + "\r";
- _str += vector[0].x + "\r";
- text_field.text = _str;
- }
- private function benchMarkj(_fn:Function):int
- {
- var time:int = getTimer();
- _fn();
- return getTimer() - time;
- }
- private function a1():void
- {
- for(var i:int = 0; i < array.length; i++) {
- array[i].x++;
- }
- }
- private function a2():void
- {
- for(var i:String in array) {
- array[i].x++;
- }
- }
- private function a3():void
- {
- for each(var pos:Point in array) {
- pos.x++;
- }
- }
- private function a4():void
- {
- array.forEach(function(pos:Point, i:int, array:Array):void
- {
- pos.x++;
- });
- }
- private function a5():void
- {
- array.forEach(function(pos:Point, i:int, array:Array):void
- {
- array[i].x++;
- });
- }
- private function v1():void
- {
- for(var i:int = 0; i < vector.length; i++) {
- vector[i].x++;
- }
- }
- private function v2():void
- {
- for(var i:String in vector) {
- vector[i].x++;
- }
- }
- private function v3():void
- {
- for each(var pos:Point in vector) {
- pos.x++;
- }
- }
- private function v4():void
- {
- vector.forEach(function(pos:Point, i:int, vector:Vector.<Point>):void
- {
- pos.x++;
- });
- }
- private function v5():void
- {
- vector.forEach(function(pos:Point, i:int, vector:Vector.<Point>):void
- {
- vector[i].x++;
- });
- }
- }
- }
Array,Vector,Vector3D速度比較 Vector3Dは要素毎に加算すると異様に早い(かも)
- // forked from umhr's Array,Vector,Vector3D速度比較
- /**
- 同じ長さ、値のArray,Vector,Vector3Dをaddと同じ処理を100万回実行した時の処理時間(ミリ/秒)
- その2
- MacBookPro2.4Gh,OSX 10.5.6
- Array0:348//前回と同じ
- Array1:320//決め打
- Vector0:85//前回と同じ
- Vector1:80//決め打
- Vector3D0:623//前回と同じ
- Vector3D1:17//要素毎に加算
- Vector3D2:656//addの代わりの関数を作った
- Vector3D3:625//addの代わりの関数を作った2
- null:6//Vector3Dをnewしてforでまわすだけ。
- Vector3Dを要素毎に加算すると異様に早い。
- けど、早すぎてちょっと信じられない感じ。
- いろいろ検証が必要。
- add以外にもいろいろ試してみるといいかも。
- */
- package {
- import flash.display.Sprite;
- import flash.geom.Vector3D;
- import flash.text.TextField;
- public class vecor3Dtest extends Sprite {
- public var _a0a:Array =new Array(0.1,1.2,2.3);
- public var _a0b:Array =new Array(10,20,30);
- public var _v3a:Vector3D=new Vector3D(0.1,1.2,2.3);
- public var _v3b:Vector3D=new Vector3D(10,20,30);
- public var _v0a:Vector.<Number>=new Vector.<Number>(3);
- public var _v0b:Vector.<Number>=new Vector.<Number>(3);
- public function vecor3Dtest():void {
- var text_field:TextField = new TextField();
- text_field.width = stage.stageWidth;
- text_field.height = stage.stageHeight;
- stage.addChild(text_field);
- _v0a[0] = 0.1;
- _v0a[1] = 1.2;
- _v0a[2] = 2.3;
- _v0b[0] = 10;
- _v0b[1] = 20;
- _v0b[2] = 30;
- var _str:String = new String();
- _str = "同じ長さ、値のArray,Vector,Vector3Dをaddと同じ処理を100万回実行した時の処理時間(ミリ秒)\r";
- _str += "Array0:" + benchMarkj(_a0) + "\r";//366
- _str += "Array1:" + benchMarkj(_a1) + "\r";//366
- _str += "Vector0:" + benchMarkj(_v0) + "\r";//88
- _str += "Vector1:" + benchMarkj(_v1) + "\r";//88
- _str += "Vector3D0:" + benchMarkj(_30) + "\r";//615
- _str += "Vector3D1:" + benchMarkj(_31) + "\r";//615
- _str += "Vector3D2:" + benchMarkj(_32) + "\r";//615
- _str += "Vector3D3:" + benchMarkj(_32) + "\r";//615
- _str += "null:" + benchMarkj(_00) + "\r";//615
- text_field.text = _str;
- }
- //100万回関数を実行して、かかった時間をtrace
- private function benchMarkj(_fn:Function):int {
- var time:Number = (new Date()).getTime();
- _fn(1000000);
- return (new Date()).getTime() - time;
- }
- private function _a0(n:uint):void {
- var _a0c:Array =new Array();
- for (var i:int = 0; i < n; i++) {
- for (var j:int = 0; j < 3; j++) {
- _a0c[j] = _a0a[j]+_a0b[j];
- }
- }
- //trace(_a0c);
- }
- private function _a1(n:uint):void {
- var _a0c:Array =new Array();
- for (var i:int = 0; i < n; i++) {
- _a0c[int(0)] = _a0a[int(0)]+_a0b[int(0)];
- _a0c[int(1)] = _a0a[int(1)]+_a0b[int(1)];
- _a0c[int(2)] = _a0a[int(2)]+_a0b[int(2)];
- }
- //trace(_a0c);
- }
- private function _v0(n:uint):void {
- var _v0c:Vector.<Number>=new Vector.<Number>(3);
- for (var i:int = 0; i < n; i++) {
- for (var j:int = 0; j < 3; j++) {
- _v0c[j] = _v0a[j]+_v0b[j];
- }
- }
- //trace(_v0c);
- }
- private function _v1(n:uint):void {
- var _v0c:Vector.<Number>=new Vector.<Number>(3);
- for (var i:int = 0; i < n; i++) {
- _v0c[int(0)] = _v0a[int(0)]+_v0b[int(0)];
- _v0c[int(1)] = _v0a[int(1)]+_v0b[int(1)];
- _v0c[int(2)] = _v0a[int(2)]+_v0b[int(2)];
- }
- //trace(_v0c);
- }
- private function _30(n:uint):void {
- var _v3c:Vector3D=new Vector3D();
- for (var i:int = 0; i < n; i++) {
- _v3c = _v3a.add(_v3b);
- }
- //trace(_v3c);
- }
- private function _31(n:uint):void {
- var _v3c:Vector3D=new Vector3D();
- for (var i:int = 0; i < n; i++) {
- _v3c.x = _v3a.x + _v3b.x;
- _v3c.y = _v3a.y + _v3b.y;
- _v3c.z = _v3a.z + _v3b.z;
- }
- //trace(_v3c);
- }
- private function _32(n:uint):void {
- var _v3c:Vector3D=new Vector3D();
- for (var i:int = 0; i < n; i++) {
- _v3c = vAdd2(_v3a,_v3b)
- }
- }
- private function vAdd2(_v0:Vector3D,_v1:Vector3D):Vector3D{
- var _v2:Vector3D=new Vector3D();
- _v2.x = _v0.x + _v1.x;
- _v2.y = _v0.y + _v1.y;
- _v2.z = _v0.z + _v1.z;
- return _v2;
- }
- private function _33(n:uint):void {
- var _v3c:Vector3D=new Vector3D();
- for (var i:int = 0; i < n; i++) {
- vAdd3(_v3a,_v3b);
- }
- }
- private function vAdd3(_v0:Vector3D,_v1:Vector3D):void{
- _v0.x = _v0.x + _v1.x;
- _v0.y = _v0.y + _v1.y;
- _v0.z = _v0.z + _v1.z;
- }
- private function _00(n:uint):void {
- var _v3c:Vector3D=new Vector3D();
- for (var i:int = 0; i < n; i++) {
- }
- }
- }
- }
notice: 

