Mümkünse, nesneleri yeniden oluşturmak yerine yeniden kullanın.
Belleği en iyileştirmenin başka bir basit yolu nesneleri yeniden kullanmak ve mümkün olduğunda onları yeniden oluşturmaktan kaçınmaktır. Örneğin, bir döngüde, aşağıdaki kodu kullanmayın:
const MAX_NUM:int = 18;
const COLOR:uint = 0xCCCCCC;
var area:Rectangle;
for (var:int = 0; i < MAX_NUM; i++)
{
// Do not use the following code
area = new Rectangle(i,0,1,10);
myBitmapData.fillRect(area,COLOR);
}
Her yinelemede yeni bir nesne yaratıldığından her döngü yinelemesinde Rectangle nesnesinin yeniden oluşturulması daha fazla bellek kullanır ve daha yavaştır. Aşağıdaki yaklaşımı kullanın:
const MAX_NUM:int = 18;
const COLOR:uint = 0xCCCCCC;
// Create the rectangle outside the loop
var area:Rectangle = new Rectangle(0,0,1,10);
for (var:int = 0; i < MAX_NUM; i++)
{
area.x = i;
myBitmapData.fillRect(area,COLOR);
}
Önceki örnek daha ufak bir bellek etkisine sahip bir nesne kullandı. Bir sonraki örnek bir BitmapData nesnesi kullanarak daha büyük bellek tasarrufunu gösterir. Aşağıda bir döşeme efekti oluşturan kod bellek harcar:
var myImage:BitmapData;
var myContainer:Bitmap;
const MAX_NUM:int = 300;
for (var i:int = 0; i< MAX_NUM; i++)
{
// Create a 20 x 20 pixel bitmap, non-transparent
myImage = new BitmapData(20,20,false,0xF0D062);
// Create a container for each BitmapData instance
myContainer = new Bitmap(myImage);
// Add it to the display list
addChild(myContainer);
// Place each container
myContainer.x = (myContainer.width + 8) * Math.round(i % 20);
myContainer.y = (myContainer.height + 8) * int(i / 20);
}
Not:
Pozitif değerler kullanırken, yuvarlanan değerin int öğesine dağıtılması
Math.floor()
yönteminin kullanılmasından çok daha hızlıdır.
Aşağıdaki resim bitmap döşemenin sonucunu gösterir:
En iyileştirilmiş bir sürüm birden fazla Bitmap örneği tarafından başvurulan ve aynı sonucu üreten tek bir BitmapData örneği oluşturur.
// Create a single 20 x 20 pixel bitmap, non-transparent
var myImage:BitmapData = new BitmapData(20,20,false,0xF0D062);
var myContainer:Bitmap;
const MAX_NUM:int = 300;
for (var i:int = 0; i< MAX_NUM; i++)
{
// Create a container referencing the BitmapData instance
myContainer = new Bitmap(myImage);
// Add it to the display list
addChild(myContainer);
// Place each container
myContainer.x = (myContainer.width + 8) * Math.round(i % 20);
myContainer.y = (myContainer.height + 8) * int(i / 20);
}
Bu yaklaşım yaklaşık 700 KB'lık bellek tasarrufu sağlar, bu da geleneksel bir mobil cihaz için önemli bir tasarruftur. Her bitmap kabı Bitmap özelliklerini kullanarak orijinal BitmapData örneğini değiştirmeden işlenebilir:
// Create a single 20 x 20 pixel bitmap, non-transparent
var myImage:BitmapData = new BitmapData(20,20,false,0xF0D062);
var myContainer:Bitmap;
const MAX_NUM:int = 300;
for (var i:int = 0; i< MAX_NUM; i++)
{
// Create a container referencing the BitmapData instance
myContainer = new Bitmap(myImage);
// Add it to the DisplayList
addChild(myContainer);
// Place each container
myContainer.x = (myContainer.width + 8) * Math.round(i % 20);
myContainer.y = (myContainer.height + 8) * int(i / 20);
// Set a specific rotation, alpha, and depth
myContainer.rotation = Math.random()*360;
myContainer.alpha = Math.random();
myContainer.scaleX = myContainer.scaleY = Math.random();
}
Aşağıdaki resim bitmap dönüştürmelerinin sonucunu gösterir: