1

Mir wurde einmal gesagt, dass ich es vermeiden sollte, Eigenschaften und so meine Hauptspielklasse von anderen Klassen so weit wie möglich zu referenzieren, weil das eine ineffiziente Sache ist. Ist das tatsächlich wahr? Für ein triviales Beispiel in meinem Charakter Klasse würdeAS3: Ineffizient, zu viele Referenzen über Klassen zu machen?

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

mehr Zeit in einer Funktion auszuführen als die gleichen setzen

MainGame.function1();

und dass der Rufnummer (dadurch zu müssen „offen“ diese Klasse nur einmal statt mehrmals)? Mit der gleichen Logik würde

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

geringfügig weniger effizient als

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

+0

Ich würde das auch gerne wissen. Genauer gesagt, wenn ich eine Var habe, die von Main.as stammt und an alle meine Movieclip-Szenen weitergegeben wird. Alle erben CoreScene mit der var als intern zu sein – quantomworks

+0

Dies ist ein großartiges Beispiel für vorzeitige Optimierung. Sie werden bei beiden Ansätzen keine Leistungsprobleme haben, Leistungsprobleme werden von einem anderen Fehler herrühren. (Übrigens ist ein Funktionsaufruf teurer als eine Eigenschaftszuweisung. Aber auch hier wird Ihre kritische Leistungsoptimierung nicht zwischen diesen beiden Dingen entscheiden.) – Aaron

+0

@Aaron Vorzeitige Optimierung ist sicher, wenn Sie zu früh darüber nachdenken auf, aber die Zeit für die Optimierung kann schließlich reif sein und dann könnte es hilfreich sein zu wissen. Was ist mit: 'Main.property' teurer als' this.property'? –

Antwort

1

Denken Sie an Dinge wie Operationen. Jeden "." ist eine Operation, jeder Funktionsaufruf "()" ist eine Operation (und eine schwere), jedes "+", "-" und so weiter.

In der Tat, bestimmte Ansätze werden effizienter Code als andere generieren.

Aber. Die Sache ist, um das Ergebnis einer ineffizienten Vorgehensweise zu fühlen, müssen Sie ein Programm erstellen, das für jeden Frame Millionen von Operationen (oder schwere Aufgaben mit der entsprechenden Schwierigkeit) ausführt. Wenn Sie keine Megabyte Binärdaten analysieren oder Bitmaps konvertieren, können Sie sich keine Gedanken über die Leistung machen. Sorgen über Leistung und Effizienz ist in der Regel eine gute Sache zu tun.

Wenn Sie bereit sind, um die Effizienz des Codes zu messen, können Sie seine Leistung messen:

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."); 

Seien Sie bereit, Millionen-Iterationsschleifen zu laufen, so dass die Gesamtausführungszeit 1 Sekunde überschreitet, da sonst die Präzision wird zu niedrig sein.

Verwandte Themen