※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

FORKED

forked from: [最適化 Tips] Array, Vector 走査時のイテレ方別処理速度 forked(2) from: [最適化 Tips] Array, Vector 走査時のイテレ方別処理速度 [diff(59)]

  1. // forked from famibee's forked from: [最適化 Tips] Array, Vector 走査時のイテレ方別処理速度
  2. // forked from muta244's [最適化 Tips] Array, Vector 走査時のイテレーション方法による処理速度の違い
  3. package {
  4. import flash.display.*;
  5. import flash.geom.*;
  6. import flash.events.*;
  7. import flash.text.*;
  8. import flash.utils.*;
  9. public class Main extends Sprite
  10. {
  11.     static private const _NUM_TIMES:uint = 1000000;
  12.     
  13.     private function _init():void
  14.     {
  15.         _debug(
  16.             "各テスト " + _NUM_TIMES + " 回処理させた計算結果 [単位 : ミリ秒]\n" +
  17.             "(誤差は多少生じます)\n"
  18.         );
  19.         
  20.         var array:Array = [];
  21.         var vector1:Vector.<int> = new Vector.<int>(0false);
  22.         var vector2:Vector.<int> = new Vector.<int>(_NUM_TIMES, false);
  23.         var vector3:Vector.<int> = new Vector.<int>(_NUM_TIMES, true);
  24.         
  25.         for (var i:uint = 0; i < _NUM_TIMES; i++) {
  26.             array[i] = 0;
  27.             vector1[i] = 0;
  28.         }
  29.         
  30.         _measure("ループのみ"function ():void
  31.         {
  32.             for (var i:int = 0; i < _NUM_TIMES; i++) {
  33.                 
  34.             }
  35.         });
  36.         
  37.         _measure("Vector.<int>(0, false) を for で処理"function ():void
  38.         {
  39.             var e:int;
  40.             for (var i:uint = 0, l:uint = vector1.length; i < l; i++) {
  41.                 e = vector1[i];
  42.             }
  43.         });
  44.         
  45.         _measure("Vector.<int>(" + _NUM_TIMES + ", false) を for で処理"function ():void
  46.         {
  47.             var e:int;
  48.             for (var i:uint = 0, l:uint = vector2.length; i < l; i++) {
  49.                 e = vector2[i];
  50.             }
  51.         });
  52.         _measure("Vector.<int>(" + _NUM_TIMES + ", false) を for(++i)で処理【追加】"function ():void
  53.         {
  54.             var e:int;
  55.             for (var i:uint = 0, l:uint = vector2.length; i < l; ++i) {
  56.                 e = vector2[i];
  57.             }
  58.         });
  59.         _measure("Vector.<int>(" + _NUM_TIMES + ", false) を for(++i、const len)で処理【追加】"function ():void
  60.         {
  61.             var e:int;
  62.             const l:uint = vector2.length;
  63.             for (var i:uint = 0; i < l; ++i) {
  64.                 e = vector2[i];
  65.             }
  66.         });
  67.         
  68.         _measure("Vector.<int>(" + _NUM_TIMES + ", false) を for each で処理"function ():void
  69.         {
  70.             for each (var e:uint in vector2) {
  71.                 
  72.             }
  73.         });
  74.         
  75.         _measure("Vector.<int>(" + _NUM_TIMES + ", false) を forEach で処理"function ():void
  76.         {
  77.             vector2.forEach(function (e:int, i:int, elements:Vector.<int>):void
  78.             {
  79.                 
  80.             });
  81.         });
  82.         _measure("Vector.<int>(" + _NUM_TIMES + ", false) を forEach(const Function)で処理【追加】"function ():void
  83.         {
  84.             const fnc:Function = vector2.forEach;
  85.             fnc(function (e:int, i:int, elements:Vector.<int>):void
  86.             {
  87.                 
  88.             });
  89.         });
  90.         
  91.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を for で処理"function ():void
  92.         {
  93.             var e:int;
  94.             for (var i:uint = 0, l:uint = vector3.length; i < l; i++) {
  95.                 e = vector3[i];
  96.             }
  97.         });
  98.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を for(++i)で処理【追加】"function ():void
  99.         {
  100.             var e:int;
  101.             for (var i:uint = 0, l:uint = vector3.length; i < l; ++i) {
  102.                 e = vector3[i];
  103.             }
  104.         });
  105.         
  106.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を for each で処理"function ():void
  107.         {
  108.             for each (var e:int in vector3) {
  109.                 
  110.             }
  111.         });
  112.         
  113.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を forEach で処理"function ():void
  114.         {
  115.             vector3.forEach(function (e:int, i:int, elements:Vector.<int>):void
  116.             {
  117.                 
  118.             });
  119.         });
  120.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を forEach(const Function)で処理【追加】"function ():void
  121.         {
  122.             const fnc:Function = vector3.forEach;
  123.             fnc(function (e:int, i:int, elements:Vector.<int>):void
  124.             {
  125.                 
  126.             });
  127.         });
  128.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を forEach(const Function、local ProcFnc)で処理【追加】"function ():void
  129.         {
  130.             const fnc:Function = vector3.forEach;
  131.             fnc(fncGoGoVctInt100ManTrueLocalProc);
  132.         });
  133.         function fncGoGoVctInt100ManTrueLocalProc(e:int, i:int, elements:Vector.<int>):void
  134.         {
  135.         }
  136.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を forEach(const Function、member ProcFnc)で処理【追加】"function ():void
  137.         {
  138.             const fnc:Function = vector3.forEach;
  139.             fnc(fncGoGoVctInt100ManTrueProc);
  140.         });
  141.         _measure("Vector.<int>(" + _NUM_TIMES + ", true) を forEach(const Function、static ProcFnc)で処理【追加】"function ():void
  142.         {
  143.             const fnc:Function = vector3.forEach;
  144.             fnc(fncGoGoVctInt100ManTrueStatic);
  145.         });
  146.         
  147.         _debug("\n結果については言及しませんので, 各自ご判断ください.");
  148.     }
  149.     private function fncGoGoVctInt100ManTrueProc(e:int, i:int, elements:Vector.<int>):void {}
  150.     private static function fncGoGoVctInt100ManTrueStatic(e:int, i:int, elements:Vector.<int>):void {}
  151.     
  152.     private var _field:TextField;
  153.     private var _time:uint;
  154.     
  155.     public function Main():void
  156.     {
  157.         _setup();
  158.         _init();
  159.     }
  160.     
  161.     private function _measure(title:String, func:Function, ...params):void
  162.     {
  163.         _time = getTimer();
  164.         func.apply(null, params);
  165.         _time = getTimer() - _time;
  166.         
  167.         _debug("[ " + title + " ] --> " + _time + " ms");
  168.     }
  169.     
  170.     private function _debug(log:String):void
  171.     {
  172.         _field.appendText(log + "\n");
  173.     }
  174.     
  175.     private function _setup():void
  176.     {
  177.         _field = new TextField();
  178.         _field.width = stage.stageWidth - 40;
  179.         _field.height = stage.stageHeight - 60;
  180.         _field.x = 20;
  181.         _field.y = 60;
  182.         _field.multiline = true;
  183.         _field.wordWrap = true;
  184.         
  185.         var format:TextFormat = _field.defaultTextFormat;
  186.         format.font = "_sans";
  187.         _field.defaultTextFormat = format;
  188.         
  189.         addChild(_field);
  190.         
  191.         var button:Sprite = new Sprite();
  192.         button.graphics.lineStyle(1, 0xBBBBBB);
  193.         button.graphics.beginFill(0xEEEEEE);
  194.         button.graphics.drawRoundRect(001002055);
  195.         button.graphics.endFill();
  196.         
  197.         addChild(button);
  198.         
  199.         button.x = 20;
  200.         button.y = 20;
  201.         button.mouseChildren = false;
  202.         button.buttonMode = true;
  203.         
  204.         var field:TextField = new TextField();
  205.         field.width = 100;
  206.         field.height = 20;
  207.         field.htmlText = "<p align='center'><font face='_sans'>再計算</span></p>";
  208.         
  209.         button.addChild(field);
  210.         
  211.         button.addEventListener(MouseEvent.CLICK, function ():void
  212.         {
  213.             _field.text = "";
  214.             _init();
  215.         });
  216.     }
  217. }
  218. }
noswf
Get Adobe Flash Player