2010-03-06 60 views
0

我有一个库,它在describeType()(一个返回包含类或实例的所有规格的XML对象)的顶部提供反射API。由于这个库在其他几个库和框架中使用,我真的希望它尽可能快。性能重构(和测试)

我面临的问题是,我不确定重构此库的代码的最佳方法,并使测试和比较结果成为可能。我可以很容易地将定时器添加到代码中,记录输出并比较结果,但手动执行此操作似乎有很多工作要做。

因此,这给我带来了以下几个问题:

  • 有没有人做过类似的东西?
  • 您是如何测试和比较更改结果的?
  • 是否有任何测试框架(也可以是非动作脚本)在这种情况下帮助进行性能测试?
  • 你有任何其他的一般技巧?

回答

1

您可以使用FlashBuilder(不是免费)的分析器来查看可以改进的地方。

可以使用TDSI例如(仍处于发展和更优化会)

在字节码级优化(不接触源)如果你想看看是怎么回事引擎盖下和了解更多编译代码,看看tamarin的源代码(Adobe Flash在flash播放器中的使用)并学习abc bytecode

或者编写多个函数并测量它们的性能,一步一步做小的重构,看看有什么收获,可以使用gskinner library进行测量(不要使用调试播放器,因为某些功能比较慢)。

阅读关于as3 optimisation的一些论文。有好的人喜欢Joa Ebert,Grant Skinner

但是,如果优化后的增益较小,则更愿意保持代码的可读性。

1

测量找到是不同的问题。

您可以通过查找并修复需要花费最多时间的代码来快速完成代码,这不是测量,而是取样 - 时间越长,找到它所需的样本越少。

什么衡量是好的是看到多少时间实际上保存。

采样不丢弃信息很重要。单独的程序计数器(as in gprof)是不够的。您至少需要整个调用堆栈进行采样。查看行级信息非常重要,因为在函数中总结了丢弃信息。在随机挂钟时间而不是随机CPU时间进行采样很重要(如gprof和其他分析器)。随机CPU时间的采样对于花费在不必要的I/O或系统功能上的时间是盲目的。

一个好的分析器是RotateRight/Zoom。我使用this technique