2011-11-19 114 views
1

我有这样一段代码:AS3循环优化

palette = new Array(paletteSize); 
for (var i:int=0;i<paletteSize;i++) { 
    palette[i] = 0xFF000000 
    | (inputStream.readUnsignedByte() << 16) 
    | (inputStream.readUnsignedByte() << 8) 
    | (inputStream.readUnsignedByte()); 
} 

该代码被执行周围300次,每次paletteSize从1-255变化。所以,总的来说,这个代码大约需要60-80ms。这可以通过某种方式进行优化吗? inputStream(IDataInput)是一个套接字连接,它不会花费任何时间等待I/O。此代码仅在流中有足够多的字节可用时执行。

+3

尝试使用“Vector。”而不是Array。此外,如果您控制传入流,则可以发送4字节的颜色,并使用readUnsignedInt读取它们,避免位移。 –

+2

@VilleKrumlinde你为什么不回答这个问题? – weltraumpirat

+0

我不确定,因为自从我做了as3开发之后,我一直在怯懦地写下评论(downvoters是无情的;-)),但现在我已经做出了答案。 –

回答

2

复制我的评论:尝试使用“向量”。而不是Array。此外,如果您控制传入流,则可以发送4字节的颜色,并使用readUnsignedInt读取它们,避免位移。

+0

我只需要一个数组,因为它去了bitmapdata.paletteMap():(我不' t可以控制输入流 – Nakul

+0

我看到了,也许可以将R和G都看作一个16位短“(inputStream.readUnsignedShort()<< 8)| inputStream.readUnsignedByte()”,然后呢? –