3

我有一个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我重置的每个属性(数学上)是否有一些繁重的事情发生的情况下。

4

1 回答 1

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
于 2012-04-10T08:53:40.733 回答