FORKED

[最適化 Tips] サイン・コサインの取得方法による処理速度の違い [最適化 Tips] Number, int, uint の計算による処理速度の違い [diff(46)]

  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:int = 1000000;
  10.     
  11.     private function _init():void
  12.     {
  13.         _debug(
  14.             "各テスト " + _NUM_TIMES + " 回処理させた計算結果 [単位 : ミリ秒]\n" +
  15.             "(誤差は多少生じます)\n"
  16.         );
  17.         
  18.         var n1:Number = 1.0;
  19.         var n2:int = 1;
  20.         var n3:uint = 1;
  21.         
  22.         _measure("ループのみ"function ():void
  23.         {
  24.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  25.                 
  26.             }
  27.         });
  28.         
  29.         _measure("Number 同士の演算"function ():void
  30.         {
  31.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  32.                 n1 = n1 + n1 - n1;
  33.             }
  34.         });
  35.         
  36.         _measure("int 同士の演算"function ():void
  37.         {
  38.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  39.                 n2 = n2 + n2 - n2;
  40.             }
  41.         });
  42.         
  43.         _measure("uint 同士の演算"function ():void
  44.         {
  45.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  46.                 n3 = n3 + n3 - n3;
  47.             }
  48.         });
  49.         
  50.         _measure("int 同士の演算 (途中でキャスト)"function ():void
  51.         {
  52.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  53.                 n2 = int(n2 + n2) - n2;
  54.             }
  55.         });
  56.         
  57.         _measure("uint 同士の演算 (途中でキャスト)"function ():void
  58.         {
  59.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  60.                 n3 = int(n3 + n3) - n3;
  61.             }
  62.         });
  63.         
  64.         _measure("全てを掛け合わせて演算"function ():void
  65.         {
  66.             for (var i:uint = 0; i < _NUM_TIMES; i++) {
  67.                 n1 = n1 + n2 - n3;
  68.             }
  69.         });
  70.         
  71.         _debug("\n結果については言及しませんので, 各自ご判断ください.");
  72.     }
  73.     
  74.     private var _field:TextField;
  75.     private var _time:uint;
  76.     
  77.     public function Main():void
  78.     {
  79.         _setup();
  80.         _init();
  81.     }
  82.     
  83.     private function _measure(title:String, func:Function, ...params):void
  84.     {
  85.         _time = getTimer();
  86.         func.apply(null, params);
  87.         _time = getTimer() - _time;
  88.         
  89.         _debug("[ " + title + " ] --> " + _time + " ms");
  90.     }
  91.     
  92.     private function _debug(log:String):void
  93.     {
  94.         _field.appendText(log + "\n");
  95.     }
  96.     
  97.     private function _setup():void
  98.     {
  99.         _field = new TextField();
  100.         _field.width = stage.stageWidth - 40;
  101.         _field.height = stage.stageHeight - 60;
  102.         _field.x = 20;
  103.         _field.y = 60;
  104.         _field.multiline = true;
  105.         _field.wordWrap = true;
  106.         
  107.         var format:TextFormat = _field.defaultTextFormat;
  108.         format.font = "_sans";
  109.         _field.defaultTextFormat = format;
  110.         
  111.         addChild(_field);
  112.         
  113.         var button:Sprite = new Sprite();
  114.         button.graphics.lineStyle(1, 0xBBBBBB);
  115.         button.graphics.beginFill(0xEEEEEE);
  116.         button.graphics.drawRoundRect(001002055);
  117.         button.graphics.endFill();
  118.         
  119.         addChild(button);
  120.         
  121.         button.x = 20;
  122.         button.y = 20;
  123.         button.mouseChildren = false;
  124.         button.buttonMode = true;
  125.         
  126.         var field:TextField = new TextField();
  127.         field.width = 100;
  128.         field.height = 20;
  129.         field.htmlText = "<p align='center'><font face='_sans'>再計算</span></p>";
  130.         
  131.         button.addChild(field);
  132.         
  133.         button.addEventListener(MouseEvent.CLICK, function ():void
  134.         {
  135.             _field.text = "";
  136.             _init();
  137.         });
  138.     }
  139. }
  140. }
noswf
Get Adobe Flash Player