重置属性集合或创建新实例会更快吗?

时间:2012-04-10 08:08:50

标签: actionscript-3 recycle

我有一个Matrix我将其回收并用于将DisplayObject个实例绘制到Bitmap上。

目前,我在渲染每个项目之前重置Matrix,如下所示:

_matrix.a = 1;
_matrix.b = 0;
_matrix.c = 0;
_matrix.d = 1;
_matrix.tx = 0;
_matrix.ty = 0;

做上述内容会更好吗,还是只是这样做?:

_matrix = new Matrix();

一般来说,我会说前者,但是我不确定在Matrix的情况下是否有一些重要的事情发生在我重置(数学上)的每一个属性。

1 个答案:

答案 0 :(得分:7)

我认为重复使用Matrix的相同实例比每次创建新实例更有效。

实际上,创建一个新实例是一个相对繁重的操作,这就是使用缓存的原因:创建一些实例并重用它们而不是创建大量实例。

我运行了一点基准,它确认了我的答案:

var t:Number;
var i:int;
var N:int = 10000000;

t = getTimer();
for (i = 0; i < N; i++) {
    _matrix = new Matrix();
}
trace(getTimer()-t); // 7600


t = getTimer();
for (i = 0; i < N; i++) {
    _matrix.a = 1;
    _matrix.b = 0;
    _matrix.c = 0;
    _matrix.d = 1;
    _matrix.tx = 0;
    _matrix.ty = 0;
}
trace(getTimer()-t); // 4162

最后,请注意差异不是很大,并且创建10000000个新实例仅需7600 ms,所以除非您每帧创建数千个矩阵,否则任何一种方法都不会对绩效的显着影响。


修改

使用方法identity将具有两种方法(简单性和性能)的优点:

t = getTimer();
for (i = 0; i < N; i++) {
    _matrix.identity();
}
trace(getTimer()-t); // 4140