Array,Vector,Vector3D速度比較

by umhr
同じ長さ、値のArray,Vector,Vector3Dをaddと同じ処理を100万回実行した時の処理時間(ミリ/秒)
MacBookPro2.4Gh,OSX 10.5.6
Arrayの場合0.366秒
Vectorの場合0.088秒
Vector3Dの場合0.615秒

Vectorはさすがに早い。
Vector3Dは予想通り遅い。

add以外にもいろいろ試してみるといいかも。

♥5 | Line 64 | Modified 2009-01-03 02:04:21 | MIT License
play

ActionScript3 source code

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

/**
同じ長さ、値のArray,Vector,Vector3Dをaddと同じ処理を100万回実行した時の処理時間(ミリ/秒)
MacBookPro2.4Gh,OSX 10.5.6
Arrayの場合0.366秒
Vectorの場合0.088秒
Vector3Dの場合0.615秒

Vectorはさすがに早い。
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 += "Array:" + benchMarkj(_a0) + "\r";//366
			_str += "Vector:" + benchMarkj(_v0) + "\r";//88 
			_str += "Vector3D:" + benchMarkj(_30) + "\r";//615
			_str += "Array:" + benchMarkj(_a0) + "\r";//350
			_str += "Vector:" + benchMarkj(_v0) + "\r";//86 
			_str += "Vector3D:" + benchMarkj(_30) + "\r";//646 
			_str += "Array:" + benchMarkj(_a0) + "\r";//329
			_str += "Vector:" + benchMarkj(_v0) + "\r";//93 
			_str += "Vector3D:" + benchMarkj(_30) + "\r";//647 
			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 _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 _30(n:uint):void {
			var _v3c:Vector3D=new Vector3D();
			for (var i:int = 0; i < n; i++) {
				_v3c = _v3a.add(_v3b);
			}
			//trace(_v3c);
		}
		
	}
}

Forked