In my original post on the new Flash Player 10 Vector class, I did a simple example that showed Vectors being slightly faster than Array when just populating and looping through collections.
Below is another example that shows a more significant performance increase when using Vectors. In this example, I populate an Array and Vector with 5 million random numbers, and then loop through them and average all of the numbers.
Running the test on my MacBook Pro, the Vector is about 60% faster:
Vector 1.824
Array 2.938
62.08 %
Here is the code:
Below is another example that shows a more significant performance increase when using Vectors. In this example, I populate an Array and Vector with 5 million random numbers, and then loop through them and average all of the numbers.
Running the test on my MacBook Pro, the Vector is about 60% faster:
Vector 1.824
Array 2.938
62.08 %
Here is the code:
package {
import flash.display.Sprite;
import __AS3__.vec.Vector;
public class VectorPerformance extends Sprite
{
private static const LENGTH:int = 5000000;
public function VectorPerformance()
{
//vector performance
var vectorStartTime:Number = getTime();
var v:Vector.<Number> = generateVector();
var vAvg:Number = averageVector(v);
var vectorTime:Number = (getTime() - vectorStartTime) / 1000;
//array performance
var arrayStartTime:Number = getTime();
var a:Array = generateArray();
var aAvg:Number = averageArray(a);
var arrayTime:Number = (getTime() - arrayStartTime) / 1000;
trace("Vector", vectorTime);
trace("Array", arrayTime);
trace((vectorTime/arrayTime) * 100 + " %");
}
private function generateVector():Vector.<Number>
{
var v:Vector.<Number> = new Vector.<Number>(LENGTH, true);
for(var i:int = 0; i < LENGTH; i++)
{
v[i] = Math.random() * 100000;
}
return v;
}
private function averageVector(v:Vector.<Number>):Number
{
var sum:Number = 0;
var len:int = v.length;
for(var i:int = 0; i < LENGTH; i++)
{
sum += v[i];
}
return (sum / len);
}
private function generateArray():Array
{
var a:Array = new Array(LENGTH);
for(var i:int = 0; i < LENGTH; i++)
{
a[i] = Math.random() * 100000;
}
return a;
}
private function averageArray(arr:Array):Number
{
var sum:Number = 0;
var len:int = arr.length;
for(var i:int = 0; i < LENGTH; i++)
{
sum += arr[i];
}
return (sum / len);
}
private function getTime():Number
{
return (new Date()).getTime();
}
}
}
No comments:
Post a Comment