try casting your vector calls: vecD[i>>0] or vecC[i>>0][j>>0]
Also try ++i instead of i++ in your loops.
Finally try array[array.length>>0] = value instead of array.push(value);
Embed
/**
* Copyright necoEngine ( http://wonderfl.net/user/necoEngine )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/5uYH
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.utils.getTimer;
public class FlashTest extends Sprite {
public function FlashTest() {
/**
* 計測の仕方が変なのかな。。。
* Vector配列の二次元配列の処理はArray型のそれより遅くなってしまう。
* Array型に至っては二次元配列の方が速い。
* 要素に格納するデータ型によっても違うのかな。
**/
var n0:uint;
var n1:uint = 2500;
var n2:uint = 4000;
var i:uint, j:uint;
var arrayA:Array = new Array();
var arrayB:Array = new Array();
var vecA:Vector.<Vector.<uint>> = new Vector.<Vector.<uint>>();
var vecB:Vector.<uint> = new Vector.<uint>();
var vecC:Vector.<Vector.<uint>>;
var vecD:Vector.<uint>;
var a:uint = 0, b:uint = 0, c:uint, d:uint;
var startTime:uint;
var lap:uint;
var myText:TextField = new TextField();
addChild(myText);
myText.width = 600;
myText.height = 300;
// Array A
startTime = getTimer();
for (i = 0; i < n1; i++) {
arrayA.push(new Array());
for (j = 0; j < n2; j++) {
n0 = i * n2 + j;
arrayA[i].push(n0);
}
}
for (i = 0; i < n1; i++) {
for (j = 0; j < n2; j++) {
a += arrayA[i][j];
}
}
lap = getTimer() - startTime;
myText.text = "Array 二次元: " + lap.toString();
// Array B
n0 = n1 * n2;
startTime = getTimer();
for (i = 0; i < n0; i++) arrayB.push(i);
for (i = 0; i < n0; i++) b += arrayB[i];
lap = getTimer() - startTime;
myText.text = myText.text + "\nArray 一次元: " + lap.toString();
// Vector A
startTime = getTimer();
for (i = 0; i < n1; i++) {
vecA.push(new Vector.<uint>());
for (j = 0; j < n2; j++) {
n0 = i * n2 + j;
vecA[i].push(n0);
}
}
for (i = 0; i < n1; i++) {
for (j = 0; j < n2; j++) {
c += vecA[i][j];
}
}
lap = getTimer() - startTime;
myText.text = myText.text + "\nVector 二次元: " + lap.toString();
// Vector B
n0 = n1 * n2;
startTime = getTimer();
for (i = 0; i < n0; i++) vecB.push(i);
for (i = 0; i < n0; i++) d += vecB[i];
lap = getTimer() - startTime;
myText.text = myText.text + "\nVector 一次元: " + lap.toString();
// Vector C Fixed
vecC = new Vector.<Vector.<uint>>(n1, true);
c = 0;
startTime = getTimer();
for (i = 0; i < n1; i++) {
vecC[i] = new Vector.<uint>(n2, true);
for (j = 0; j < n2; j++) {
n0 = i * n2 + j;
vecC[i][j] = n0;
}
}
for (i = 0; i < n1; i++) {
for (j = 0; j < n2; j++) {
c += vecC[i][j];
}
}
lap = getTimer() - startTime;
myText.text = myText.text + "\nVector 二次元 配列長固定: " + lap.toString();
// Vector D Fixed
n0 = n1 * n2;
vecD = new Vector.<uint>(n0, true);
d = 0;
startTime = getTimer();
for (i = 0; i < n0; i++) vecD[i] = i;
for (i = 0; i < n0; i++) d += vecD[i];
lap = getTimer() - startTime;
myText.text = myText.text + "\nVector 一次元 配列長固定: " + lap.toString();
}
}
}