Vector-Klasse und Array-Klasse im Vergleich

Verwenden Sie nach Möglichkeit die Vector-Klasse anstelle der Array-Klasse.

Die Vector-Klasse ermöglicht schnelleren Lese- und Schreibzugriff als die Array-Klasse.

Ein einfacher Vergleichswert verdeutlicht die Vorteile der Vector-Klasse gegenüber der Array-Klasse. Der folgende Code zeigt einen Vergleichswert für die Array-Klasse:

var coordinates:Array = new Array(); 
var started:Number = getTimer(); 
  
for (var i:int = 0; i< 300000; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
  
trace(getTimer() - started); 
// output: 107 

Der folgende Code zeigt einen Vergleichswert für die Vector-Klasse:

var coordinates:Vector.<Number> = new Vector.<Number>(); 
var started:Number = getTimer(); 
  
for (var i:int = 0; i< 300000; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
 
trace(getTimer() - started); 
// output: 72 

Das Beispiel kann noch weiter optimiert werden, indem dem Vektor eine bestimmte Länge als fester Wert zugewiesen wird:

// Specify a fixed length and initialize its length 
var coordinates:Vector.<Number> = new Vector.<Number>(300000, true); 
  
var started:Number = getTimer(); 
  
for (var i:int = 0; i< 300000; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
 
trace(getTimer() - started); 
// output: 48 

Wenn die Vektorgröße nicht vorab angegeben wird, nimmt die Größe zu, wenn der Vektor nicht mehr über ausreichend Platz verfügt. Jedes Mal, wenn die Vektorgröße zunimmt, wird ein neuer Arbeitsspeicherblock zugewiesen. Der aktuelle Inhalt des Vektors wird in den neuen Arbeitsspeicherblock kopiert. Diese zusätzliche Speicherzuweisung und das Kopieren der Daten wirken sich negativ auf die Leistung aus. Der oben gezeigte Code ist hinsichtlich der Leistung optimiert, da die anfängliche Vektorgröße angegeben wird. Der Code ist jedoch nicht für die Pflegefreundlichkeit optimiert. Um auch die Codepflege zu vereinfachen, muss der wieder verwendete Wert in einer Konstante gespeichert werden:

// Store the reused value to maintain code easily 
const MAX_NUM:int = 300000; 
  
var coordinates:Vector.<Number> = new Vector.<Number>(MAX_NUM, true); 
var started:Number = getTimer(); 
  
for (var i:int = 0; i< MAX_NUM; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
  
trace(getTimer() - started); 
// output: 47 

Verwenden Sie nach Möglichkeit die APIs für Vector-Objekte, da sie wahrscheinlich schneller ausgeführt werden können.