可能な場合は、Array クラスの代わりに Vector クラスを使用してください。
Vector クラスを使用すると、Array クラスよりも高速な読み込みおよび書き込みアクセスが可能です。
単純なベンチマークによって、Array クラスに対する Vector クラスの優位性が示されます。次のコードは Array クラスのベンチマークを示しています。
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
次のコードは Vector クラスのベンチマークを示しています。
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
この例はさらに最適化できます。それには、Vector に特定の長さを割り当て、その長さを固定値に設定します。
// 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
Vector のサイズが時間よりも先に指定されない場合、Vector の容量が不足すると、サイズが増えます。Vector のサイズが増えるたびに、メモリの新しいブロックが割り当てられます。Vector の最新の内容がメモリの新しいブロックにコピーされます。データを余分に割り当てて複製することにより、パフォーマンスに影響があります。上述のコードでは、Vector の初期サイズを指定することでパフォーマンスが最適化されています。ただし、コードの保守性は最適化されていません。保守性も改善するには、再利用された値を定数に保存します。
// 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
可能な場合は、Vector オブジェクト API を使用します。これにより、実行速度が高まる可能性があります。