在AS3中对代码进行基准测试

时间:2013-04-02 12:20:25

标签: actionscript-3 performance-testing

有没有人有任何提示或链接到图书馆来帮助AS3中的基准测试应用程序?我(希望)正在寻找Benchmark.js的内容,但是对于Flash和AIR。欢迎任何建议。

5 个答案:

答案 0 :(得分:4)

我经常使用的一种快速测量代码执行时间的方法是:

var start_time:int = getTimer();

someComplexCode();

trace("execution time: ", getTimer()-start_time);

这将以毫秒为单位给出一个数字。

答案 1 :(得分:3)

这并不是真正意义上的基准测试,但Adobe Scout是一个出色的分析器/性能测试器。我一直在使用它,从用于Web的SWF到Adobe AIR应用程序再到移动AIR应用程序。

答案 2 :(得分:1)

您可以尝试使用此功能:Performance Test。另外,我发现了一些很好的信息here

答案 3 :(得分:0)

您可以非常轻松地设置基准测试方法:

function test(process:Function, repeat:int = 10):void
{
    var time:Number = getTimer();
    while(--repeat >= 0) process();
    trace(getTimer() - time);
}

像这样使用:

// See how long it takes to create 50,000 Sprites and
// add them to the DisplayList.
test(function()
{
    var sprite:Sprite = new Sprite();
    addChild(sprite);

}, 50000);

答案 4 :(得分:0)

lostPixels' answer的基础上,我创建了一个类似于Python的timeit()函数的函数。该函数重复指定迭代次数的回调函数,并返回最快的执行时间。默认值为1,000,000次迭代。

以下测试程序在我的机器上运行 391ms 。如果没有trace()语句,测试执行的时间少于 1ms

<强> TimeIt.as

package {
  public class TimeIt {
    import flash.utils.getTimer;

    public static function timeIt(callback:Function, maxIterations:uint=1000000):int {
      var start_time:int, duration:int, fastest_time:int = int.MAX_VALUE;
      for (var i:int = 0; i < maxIterations; i++) {
        start_time = getTimer();
        callback();
        duration = getTimer() - start_time;
        if (duration < fastest_time) fastest_time = duration
      }
      return fastest_time;
    }
  }
}

<强> Test.as

package {
  public class Test {
    public function Test() {
      trace('Fastest Time:', TimeIt.timeIt(test, 10),'ms');
    }

    public function test():void {
      var k:int, m:int = 100;
      for (var i:int = 0; i < m; i++) {
        for (var j:int = 0; j < m; j++) {
          k = m * i + j;
          trace(k);
        }
      }
    }
  }
}

<强> Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark" 
    initialize="init(event)">
    <fx:Script>
        <![CDATA[
            protected function init(event:Event):void {
                new Test();
            }
        ]]>
    </fx:Script>
</s:Application>