Actionscript 3,生成随机数并放入字节数组,速度更快?

时间:2017-03-16 14:24:59

标签: loops actionscript-3 flash random byte

我正在尝试生成随机字节的大字节数组。使用下面的代码,我可以生成1000万个随机字节,并在大约4秒内放入一个字节数组。生成2秒,阵列放置2秒。

for (var i:Number = 0; i < reqLength; i++){
    rnd = Math.random() * 255;
    randomBytes.writeByte(rnd);
}

是否存在更快的方式?

我正在生成 int ,因为我正在创建一个扩展ASCII字符的字节数组。

1 个答案:

答案 0 :(得分:3)

通过一些调整,我将其从4s调整为0.5s。

var aBytes:ByteArray = new ByteArray;

// Set the final ByteArray length prior to filling it.
// It saves about 30% of elapsed time.
aBytes.length = 10000000;

// Write 2 500 000 x 4 byte unsigned ints instead of 10 000 000 x 1 bytes.
// You'll get 4 times less operations thus it is about 4 times faster.
for (var i:int = 0; i < 2500000; i++)
{
    // Don't use local variable = less operations.
    aBytes.writeUnsignedInt(Math.random() * uint.MAX_VALUE);
}

P.S。还有另一个有趣的选择,工作得更快,比如100ms:

var aRaster:BitmapData = new BitmapData(5000, 500, true, 0x000000);
var aBytes:ByteArray = new ByteArray;

aRaster.noise(256 * Math.random());
aRaster.copyPixelsToByteArray(aRaster.rect, aBytes);