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秒,運行百萬迭代循環,否則精度會太低。