2011-11-19 166 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()」,然後呢? –