Forked from: muta244's [最適化 Tips] Array, Vector 走査時のイテレーション方法による処理速度の違い diff:80 forked from: [最適化 Tips] Array, Vector 走査時のイテレ方別処理速度 famibee forked:1favorite:0lines:164license : MIT License modified : 2009-05-23 17:42:05 Embed Tweet // forked from muta244's [最適化 Tips] Array, Vector 走査時のイテレーション方法による処理速度の違い package { import flash.display.*; import flash.geom.*; import flash.events.*; import flash.text.*; import flash.utils.*; public class Main extends Sprite { static private const _NUM_TIMES:uint = 1000000; private function _init():void { _debug( "各テスト " + _NUM_TIMES + " 回処理させた計算結果 [単位 : ミリ秒]\n" + "(誤差は多少生じます)\n" ); var array:Array = []; var vector1:Vector.<int> = new Vector.<int>(0, false); var vector2:Vector.<int> = new Vector.<int>(_NUM_TIMES, false); var vector3:Vector.<int> = new Vector.<int>(_NUM_TIMES, true); for (var i:uint = 0; i < _NUM_TIMES; i++) { array[i] = 0; vector1[i] = 0; } _measure("ループのみ", function ():void { for (var i:int = 0; i < _NUM_TIMES; i++) { } }); _measure("Array を for で処理", function ():void { var e:int; for (var i:uint = 0, l:uint = array.length; i < l; i++) { e = array[i]; } }); _measure("Array を for(++i)で処理【追加】", function ():void { var e:int; for (var i:uint = 0, l:uint = array.length; i < l; ++i) { e = array[i]; } }); _measure("Array を for(const len)で処理【追加】", function ():void { var e:int; const l:uint = array.length; for (var i:uint = 0; i < l; i++) { e = array[i]; } }); _measure("Array を for(++i、const len)で処理【追加】", function ():void { var e:int; const l:uint = array.length; for (var i:uint = 0; i < l; ++i) { e = array[i]; } }); _measure("Array を for each で処理", function ():void { for each (var e:int in array) { } }); _measure("Array を forEach で処理", function ():void { array.forEach(function (e:int, i:int, elements:Array):void { }); }); _measure("Array を forEach(const Function)で処理【追加】", function ():void { const fnc:Function = array.forEach; fnc(function (e:int, i:int, elements:Array):void { }); }); _measure("Vector.<int>(0, false) を for で処理", function ():void { var e:int; for (var i:uint = 0, l:uint = vector1.length; i < l; i++) { e = vector1[i]; } }); _measure("Vector.<int>(0, false) を for(++i)で処理【追加】", function ():void { var e:int; for (var i:uint = 0, l:uint = vector1.length; i < l; ++i) { e = vector1[i]; } }); _measure("Vector.<int>(0, false) を for each で処理", function ():void { for each (var e:int in vector1) { } }); _measure("Vector.<int>(0, false) を forEach で処理", function ():void { vector1.forEach(function (e:uint, i:uint, elements:Vector.<int>):void { }); }); _measure("Vector.<int>(0, false) を forEach(const Function)で処理【追加】", function ():void { const fnc:Function = vector1.forEach; fnc(function (e:uint, i:uint, elements:Vector.<int>):void { }); }); _debug("\n結果については言及しませんので, 各自ご判断ください."); } private var _field:TextField; private var _time:uint; public function Main():void { _setup(); _init(); } private function _measure(title:String, func:Function, ...params):void { _time = getTimer(); func.apply(null, params); _time = getTimer() - _time; _debug("[ " + title + " ] --> " + _time + " ms"); } private function _debug(log:String):void { _field.appendText(log + "\n"); } private function _setup():void { _field = new TextField(); _field.width = stage.stageWidth - 40; _field.height = stage.stageHeight - 60; _field.x = 20; _field.y = 60; _field.multiline = true; _field.wordWrap = true; var format:TextFormat = _field.defaultTextFormat; format.font = "_sans"; _field.defaultTextFormat = format; addChild(_field); var button:Sprite = new Sprite(); button.graphics.lineStyle(1, 0xBBBBBB); button.graphics.beginFill(0xEEEEEE); button.graphics.drawRoundRect(0, 0, 100, 20, 5, 5); button.graphics.endFill(); addChild(button); button.x = 20; button.y = 20; button.mouseChildren = false; button.buttonMode = true; var field:TextField = new TextField(); field.width = 100; field.height = 20; field.htmlText = "<p align='center'><font face='_sans'>再計算</span></p>"; button.addChild(field); button.addEventListener(MouseEvent.CLICK, function ():void { _field.text = ""; _init(); }); } } } Code Fullscreen Preview Fullscreen elements title forEach Math.log getTimer mouseChildren apply drawRoundRect wordWrap buttonMode htmlText defaultTextFormat appendText TextField MouseEvent.CLICK multiline endFill font addEventListener beginFill sort new page view favorite forked pv286 forked(2) from: [最適化 Tips] Arr.. famibee forked:0 favorite:0lines:183 (diff:59)