Bakgrund
Vad exemplet ovan visar är hur flashspelaren allokerar minne för externt inladdade bitmapbilder. I flashspelare 10.0 ligger minnet hela tiden kvar på samma nivå. I Flash Spelare 10.1 sjunker minnet efter en viss tid av inaktivitet.
Prova exemplet ovan både i flashspelare 10.0 och flashspelare 10.1. Prova att starta animationen, sedan stoppa den och vänta några sekunder.
Flashspelare 10.1 hanterar alltså inladdade bilder på ett annorlunda sätt än tidigare versioner när det kommer till minneshantering. När bilder inte animeras tas de bort från minnet och kvar finns endast skärmbufferten. När bilderna ska animeras igen återskapas de, gissningsvis från komprimerade versioner som redan finns i minnet, så att de kan användas när grafiken ska renderas om.
Problem
Detta resulterar i en extrem minnesoptimering där minnet rasar ned till en tiondel av dess ursprungliga storlek (notera att detta kan skilja sig åt beroende på många faktorer, men minnesåtgången sjunker alltid). Men det ger även en prestandaförlust när bilderna packas upp igen, vilket grafen samt animationen visar.
Lösning
Det verkar inte finnas något dokumenterat sätt att slå av minnesoptimeringen om man vill ha maximal prestanda istället för låg minnesåtgång. Vill man inte att flashspelaren ska använda den här typen av minnesoptimering kan man använda följande kod på den inladdade bilden:
var bmp:Bitmap = Bitmap ( loader.content );
bmp.bitmapData.setPixel32 ( 0, 0, bmp.bitmapData.getPixel32 ( 0, 0 ) );
Genom att “smutsa ned” första pixeln i den inladdade bilden gör man så att flashspelaren anser att bilden är förändrad och därför inte kan rensas från minnet.
