1

有人告诉我,我应该尽可能避免引用其他类的属性和主游戏类,因为这是一个效率低下的事情。这是真的吗?对于一个简单的例子,在我的性格类将AS3:在类中造成太多引用的效率低下?

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;效率较低?

+0

我也想知道这一点。具体来说,如果我有一个源自Main.as的var并传递给我的所有动画片段场景。所有这些都继承了CoreScene,并将var作为内部特定的 – quantomworks

+0

这是一个很好的优化例子。无论采用哪种方法,您都不会遇到性能问题,性能问题会从另一个缺陷中崛起。 (顺便说一句,函数调用比属性赋值更昂贵,但是再一次,你的关键性能优化不会决定这两者之间的关系。) – Aaron

+0

@Aaron过早优化肯定,如果你想太早但是,优化的时间最终可能会成熟,然后可能会有所帮助。那么怎么样:'Main.property'比'this.property'更贵? –

回答

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秒,运行百万迭代循环,否则精度会太低。