FAVORITE BY
:
:
:
performance tips
:
これは新発見
:
performancetipsworkaroundsint is faster than: floor, round, >>
:
:
intのキャストが意外とはやい
:
performanceMath.floor(*)はやっぱ遅い。ビットシフトがいいと思ってたけど、intキャストが速いっぽい。n|0も試してみたもののn>>0とほぼ同じだった。
FORKED

[最適化 Tips] 色々な整数化手段での処理速度の違い 小数点以下四捨五入の処理速度実験 [diff(23)]

  1. // forked from muta244's [最適化 Tips] 色々な整数化手段での処理速度の違い
  2. /**
  3.  * 
  4.  * http://tech.ckme.co.jp/cpp/cpp_round.shtml
  5.  * を参考にしました。
  6.  *
  7.  */
  8. package {
  9. import flash.display.*;
  10. import flash.events.*;
  11. import flash.text.*;
  12. import flash.utils.*;
  13. public class Main extends Sprite
  14. {
  15.     static private const _NUM_TIMES:uint = 1000000;
  16.     
  17.     private function _init():void
  18.     {
  19.         _debug(
  20.             "各テスト " + _NUM_TIMES + " 回処理させた計算結果 [単位 : ミリ秒]\n" +
  21.             "(誤差は多少生じます)\n"
  22.         );
  23.         
  24.         var n:Number = Math.PI;
  25.         var round:Function = Math.round;
  26.         
  27.         _measure("ループのみ"function ():void
  28.         {
  29.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  30.                 
  31.             }
  32.         });
  33.         
  34.         _measure("Math.random() * 2 - 1 のみ"function ():void
  35.         {
  36.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  37.                 n = Math.random() * 2 - 1;
  38.             }
  39.         });
  40.         
  41.         _measure("Math.round(n) で四捨五入"function ():void
  42.         {
  43.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  44.                 n = Math.random() * 2 - 1;
  45.                 Math.round(n);
  46.             }
  47.         });
  48.         
  49.         _measure("ローカル変数の round(n) で四捨五入"function ():void
  50.         {
  51.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  52.                 n = Math.random() * 2 - 1;
  53.                 round(n);
  54.             }
  55.         });
  56.         
  57.         _measure("(n > 0 ? int(n+0.5) : int(n - 0.5)) で四捨五入"function ():void
  58.         {
  59.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  60.                 n = Math.random() * 2 - 1;
  61.                 (n > 0 ? int(n+0.5) : int(n - 0.5));
  62.             }
  63.         });
  64.         
  65.         _measure("int(n+0.5-int(n<0)) で四捨五入"function ():void
  66.         {
  67.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  68.                 n = Math.random() * 2 - 1;
  69.                 int(n+0.5-int(n<0));
  70.             }
  71.         });
  72.         
  73.         _debug("\n結果については言及しませんので, 各自ご判断ください.");
  74.     }
  75.     
  76.     private var _field:TextField;
  77.     private var _time:uint;
  78.     
  79.     public function Main():void
  80.     {
  81.         _setup();
  82.         _init();
  83.     }
  84.     
  85.     private function _measure(title:String, func:Function, ...params):void
  86.     {
  87.         _time = getTimer();
  88.         func.apply(null, params);
  89.         _time = getTimer() - _time;
  90.         
  91.         _debug("[ " + title + " ] --> " + _time + " ms");
  92.     }
  93.     
  94.     private function _debug(log:String):void
  95.     {
  96.         _field.appendText(log + "\n");
  97.     }
  98.     
  99.     private function _setup():void
  100.     {
  101.         _field = new TextField();
  102.         _field.width = stage.stageWidth - 40;
  103.         _field.height = stage.stageHeight - 60;
  104.         _field.x = 20;
  105.         _field.y = 60;
  106.         _field.multiline = true;
  107.         _field.wordWrap = true;
  108.         
  109.         var format:TextFormat = _field.defaultTextFormat;
  110.         format.font = "_sans";
  111.         _field.defaultTextFormat = format;
  112.         
  113.         addChild(_field);
  114.         
  115.         var button:Sprite = new Sprite();
  116.         button.graphics.lineStyle(1, 0xBBBBBB);
  117.         button.graphics.beginFill(0xEEEEEE);
  118.         button.graphics.drawRoundRect(001002055);
  119.         button.graphics.endFill();
  120.         
  121.         addChild(button);
  122.         
  123.         button.x = 20;
  124.         button.y = 20;
  125.         button.mouseChildren = false;
  126.         button.buttonMode = true;
  127.         
  128.         var field:TextField = new TextField();
  129.         field.width = 100;
  130.         field.height = 20;
  131.         field.htmlText = "<p align='center'><font face='_sans'>再計算</span></p>";
  132.         
  133.         button.addChild(field);
  134.         
  135.         button.addEventListener(MouseEvent.CLICK, function ():void
  136.         {
  137.             _field.text = "";
  138.             _init();
  139.         });
  140.     }
  141. }
  142. }
noswf

[最適化 Tips] 色々な整数化手段での処理速度の違い forked from: [最適化 Tips] 色々な整数化手段での処理速度の違い [diff(48)]

  1. // forked from muta244's [最適化 Tips] 色々な整数化手段での処理速度の違い
  2. package {
  3. import flash.display.*;
  4. import flash.events.*;
  5. import flash.text.*;
  6. import flash.utils.*;
  7. public class Main extends Sprite
  8. {
  9.     static private const _NUM_TIMES:uint = 1000000;
  10.     
  11.     private function _init():void
  12.     {
  13.         _debug(
  14.             "各テスト " + _NUM_TIMES + " 回処理させた計算結果 [単位 : ミリ秒]\n" +
  15.             "(誤差は多少生じます)\n"
  16.         );
  17.         
  18.         var n:Number = Math.PI;
  19.         
  20.         _measure("Math.floor(n) で整数化(var i:int)"function ():void
  21.         {
  22.             for (var i:int = 0; i < _NUM_TIMES; i++) {
  23.                 Math.floor(n);
  24.             }
  25.         });
  26.         
  27.         _measure("Math.floor(n) で整数化(var i:uint)"function ():void
  28.         {
  29.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  30.                 Math.floor(n);
  31.             }
  32.         });
  33.         
  34.         _measure("n >> 0 で整数化(var i:int)"function ():void
  35.         {
  36.             for (var i:int = 0; i < _NUM_TIMES; i++) {
  37.                 n >> 0;
  38.             }
  39.         });
  40.         
  41.         _measure("n >> 0 で整数化(var i:uint)"function ():void
  42.         {
  43.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  44.                 n >> 0;
  45.             }
  46.         });
  47.         
  48.         _measure("n | 0 で整数化(var i:int)"function ():void
  49.         {
  50.             for (var i:int = 0; i < _NUM_TIMES; i++) {
  51.                 n | 0;
  52.             }
  53.         });
  54.         
  55.         _measure("n | 0 で整数化(var i:uint)"function ():void
  56.         {
  57.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  58.                 n | 0;
  59.             }
  60.         });
  61.         
  62.         _measure("int(n) で整数化(var i:int)"function ():void
  63.         {
  64.             for (var i:int = 0; i < _NUM_TIMES; i++) {
  65.                 int(n);
  66.             }
  67.         });
  68.         _measure("int(n) で整数化(var i:uint)"function ():void
  69.         {
  70.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  71.                 int(n);
  72.             }
  73.         });
  74.         _measure("uint(n) で整数化(var i:int)"function ():void
  75.         {
  76.             for (var i:int = 0; i < _NUM_TIMES; i++) {
  77.                 uint(n);
  78.             }
  79.         });
  80.         _measure("uint(n) で整数化(var i:uint)"function ():void
  81.         {
  82.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  83.                 uint(n);
  84.             }
  85.         });
  86.                 
  87.         _debug("\n結果については言及しませんので, 各自ご判断ください.");
  88.     }
  89.     
  90.     private var _field:TextField;
  91.     private var _time:uint;
  92.     
  93.     public function Main():void
  94.     {
  95.         _setup();
  96.         _init();
  97.     }
  98.     
  99.     private function _measure(title:String, func:Function, ...params):void
  100.     {
  101.         _time = getTimer();
  102.         func.apply(null, params);
  103.         _time = getTimer() - _time;
  104.         
  105.         _debug("[ " + title + " ] --> " + _time + " ms");
  106.     }
  107.     
  108.     private function _debug(log:String):void
  109.     {
  110.         _field.appendText(log + "\n");
  111.     }
  112.     
  113.     private function _setup():void
  114.     {
  115.         _field = new TextField();
  116.         _field.width = stage.stageWidth - 40;
  117.         _field.height = stage.stageHeight - 60;
  118.         _field.x = 20;
  119.         _field.y = 60;
  120.         _field.multiline = true;
  121.         _field.wordWrap = true;
  122.         
  123.         var format:TextFormat = _field.defaultTextFormat;
  124.         format.font = "_sans";
  125.         _field.defaultTextFormat = format;
  126.         
  127.         addChild(_field);
  128.         
  129.         var button:Sprite = new Sprite();
  130.         button.graphics.lineStyle(1, 0xBBBBBB);
  131.         button.graphics.beginFill(0xEEEEEE);
  132.         button.graphics.drawRoundRect(001002055);
  133.         button.graphics.endFill();
  134.         
  135.         addChild(button);
  136.         
  137.         button.x = 20;
  138.         button.y = 20;
  139.         button.mouseChildren = false;
  140.         button.buttonMode = true;
  141.         
  142.         var field:TextField = new TextField();
  143.         field.width = 100;
  144.         field.height = 20;
  145.         field.htmlText = "<p align='center'><font face='_sans'>再計算</span></p>";
  146.         
  147.         button.addChild(field);
  148.         
  149.         button.addEventListener(MouseEvent.CLICK, function ():void
  150.         {
  151.             _field.text = "";
  152.             _init();
  153.         });
  154.     }
  155. }
  156. }
noswf

[最適化 Tips] 色々な整数化手段での処理速度の違い [最適化 Tips] オブジェクト生成による処理速度の違い [diff(80)]

  1. package {
  2. import flash.display.*;
  3. import flash.geom.*;
  4. import flash.events.*;
  5. import flash.text.*;
  6. import flash.utils.*;
  7. public class Main extends Sprite
  8. {
  9.     static private const _NUM_TIMES:uint = 50000;
  10.     
  11.     private function _init():void
  12.     {
  13.         _debug(
  14.             "各テスト " + _NUM_TIMES + " 回処理させた計算結果 [単位 : ミリ秒]\n" +
  15.             "(誤差は多少生じます)\n"
  16.         );
  17.         
  18.         var object:Object;
  19.         var array:Array;
  20.         
  21.         _measure("ループのみ"function ():void
  22.         {
  23.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  24.                 
  25.             }
  26.         });
  27.         
  28.         _measure("new Object() で生成"function ():void
  29.         {
  30.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  31.                 var object:Object = new Object();
  32.             }
  33.         });
  34.         
  35.         _measure("{} で生成"function ():void
  36.         {
  37.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  38.                 var object:Object = {};
  39.             }
  40.         });
  41.         
  42.         _measure("new Array() で生成"function ():void
  43.         {
  44.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  45.                 var array:Array = new Array();
  46.             }
  47.         });
  48.         
  49.         _measure("[] で生成"function ():void
  50.         {
  51.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  52.                 var array:Array = [];
  53.             }
  54.         });
  55.         
  56.         _measure("new Vector.<int>() で生成"function ():void
  57.         {
  58.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  59.                 var vector:Vector.<int> = new Vector.<int>();
  60.             }
  61.         });
  62.         
  63.         _measure("new Vector.<int>(0, true) で生成"function ():void
  64.         {
  65.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  66.                 var vector:Vector.<int> = new Vector.<int>(0true);
  67.             }
  68.         });
  69.         
  70.         _measure("new Vector.<int>(1000, true) で生成"function ():void
  71.         {
  72.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  73.                 var vector:Vector.<int> = new Vector.<int>(1000true);
  74.             }
  75.         });
  76.         
  77.         _measure("new Vector.<int>(2000, true) で生成"function ():void
  78.         {
  79.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  80.                 var vector:Vector.<int> = new Vector.<int>(2000true);
  81.             }
  82.         });
  83.         
  84.         _measure("new Point() で生成"function ():void
  85.         {
  86.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  87.                 var point:Point = new Point();
  88.             }
  89.         });
  90.         
  91.         _measure("new Rectangle() で生成"function ():void
  92.         {
  93.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  94.                 var rectangle:Rectangle = new Rectangle();
  95.             }
  96.         });
  97.         
  98.         _measure("new Matrix() で生成"function ():void
  99.         {
  100.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  101.                 var matrix:Matrix = new Matrix();
  102.             }
  103.         });
  104.         
  105.         _measure("new Sprite() で生成"function ():void
  106.         {
  107.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  108.                 var sprite:Sprite = new Sprite();
  109.             }
  110.         });
  111.         
  112.         _measure("new Test() で独自クラス生成"function ():void
  113.         {
  114.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  115.                 var test:Test = new Test();
  116.             }
  117.         });
  118.         
  119.         _debug("\n結果については言及しませんので, 各自ご判断ください.");
  120.     }
  121.     
  122.     private var _field:TextField;
  123.     private var _time:uint;
  124.     
  125.     public function Main():void
  126.     {
  127.         _setup();
  128.         _init();
  129.     }
  130.     
  131.     private function _measure(title:String, func:Function, ...params):void
  132.     {
  133.         _time = getTimer();
  134.         func.apply(null, params);
  135.         _time = getTimer() - _time;
  136.         
  137.         _debug("[ " + title + " ] --> " + _time + " ms");
  138.     }
  139.     
  140.     private function _debug(log:String):void
  141.     {
  142.         _field.appendText(log + "\n");
  143.     }
  144.     
  145.     private function _setup():void
  146.     {
  147.         _field = new TextField();
  148.         _field.width = stage.stageWidth - 40;
  149.         _field.height = stage.stageHeight - 60;
  150.         _field.x = 20;
  151.         _field.y = 60;
  152.         _field.multiline = true;
  153.         _field.wordWrap = true;
  154.         
  155.         var format:TextFormat = _field.defaultTextFormat;
  156.         format.font = "_sans";
  157.         _field.defaultTextFormat = format;
  158.         
  159.         addChild(_field);
  160.         
  161.         var button:Sprite = new Sprite();
  162.         button.graphics.lineStyle(1, 0xBBBBBB);
  163.         button.graphics.beginFill(0xEEEEEE);
  164.         button.graphics.drawRoundRect(001002055);
  165.         button.graphics.endFill();
  166.         
  167.         addChild(button);
  168.         
  169.         button.x = 20;
  170.         button.y = 20;
  171.         button.mouseChildren = false;
  172.         button.buttonMode = true;
  173.         
  174.         var field:TextField = new TextField();
  175.         field.width = 100;
  176.         field.height = 20;
  177.         field.htmlText = "<p align='center'><font face='_sans'>再計算</span></p>";
  178.         
  179.         button.addChild(field);
  180.         
  181.         button.addEventListener(MouseEvent.CLICK, function ():void
  182.         {
  183.             _field.text = "";
  184.             _init();
  185.         });
  186.     }
  187. }
  188. }
  189. internal class Test
  190. {
  191.     
  192. }
noswf
Get Adobe Flash Player