actionscript-3 - 重置属性集合或创建新实例是否更快?

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

最佳答案

我认为重用 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 毫秒,所以除非你每帧创建数千个矩阵,这两种方法都不会对性能产生明显影响。


编辑:

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

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

关于actionscript-3 - 重置属性集合或创建新实例是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085234/

相关文章:

android - 在空中为android加载外部图片

android - ListView 中的 EditText 没有它回收输入

android - 是否存在具有 View 回收功能的 Gallery 小部件的替代品?

javascript - 是否有以下反射语言功能的名称和标准实现方式?

actionscript-3 - 变量的AS3对象表示法

android - listview回收奇怪的空空间

android - 回收位图 Ice Cream Sandwich 强制关闭

android - 在自定义数组适配器 : how exactly is it handled? 中回收 View

actionscript-3 - 语法错误: expecting identifier before this. expecting colon before leftparen. expecting identifier before rightbrace

performance - 以最快的方式查找两点之间的距离