AS3:跨类创建太多引用效率低下?

时间:2017-09-14 19:09:32

标签: performance class actionscript-3 actionscript processing-efficiency

有人告诉我,我应该尽可能避免从其他课程中引用我的主要游戏类的属性,因为这是一个低效的事情。这是真的吗?对于一个简单的例子,在我的Character类中

MainGame.property = something; MainGame.property2 = something2; MainGame.property3 = something3; //etc.

执行时间比将其放在函数

中需要更多时间

MainGame.function1();

并调用它(因此需要“打开”该类只一次而不是多次)?按照同样的逻辑,

something = MainGame.property; something2 = MainGame.property;

效率略低于

variable = MainGame.property; something = variable; something2 = variable;

1 个答案:

答案 0 :(得分:1)

考虑在操作时引用事物。每一个"。"是一个操作,每个函数调用"()"是一个操作(和一个沉重的操作),每个" +"," - "等等。

事实上,某些方法会产生比其他方法更有效的代码。

但是。问题是,要感受低效方法的结果,您需要创建一个程序,每个帧执行数百万次操作(或相应难度的繁重任务)。如果您没有解析兆字节的二进制数据,或转换位图等,您不必担心性能问题。虽然担心性能和效率通常是一件好事。

如果您愿意衡量代码的效率,可以自由衡量其效果:

var aTime:int;

var a:int = 10;
var b:int = 20;
var c:int;
var i:int;
var O:Object;

aTime = getTimer();
O = new Object;

for (i = 0; i < 1000000; i++)
{
    O.ab = a + b;
    O.ba = a + b;
}

trace("Test 1. Elapsed", getTimer() - aTime, "ms.");

aTime = getTimer();
O = new Object;
c = a + b;

for (i = 0; i < 1000000; i++)
{
    O.ab = c;
    O.ba = c;
}

trace("Test 2. Elapsed", getTimer() - aTime, "ms.");

aTime = getTimer();
O = new Object;

for (i = 0; i < 1000000; i++)
{
    O['ab'] = a + b;
    O['ba'] = a + b;
}

trace("Test 3. Elapsed", getTimer() - aTime, "ms.");

准备运行百万次迭代循环,使总执行时间超过1秒,否则精度将太低。