2009/05/07
ビットマップを切り替え表示する際の負荷の検討
既にどこかで検証されてる気がものすごくしますが、
ビットマップをどんどん切り替えるような処理をするときに、どうするのが一番負荷が低いか、
3つの方法を比べてみました。
ビットマップをどんどん切り替えるような処理をするときに、どうするのが一番負荷が低いか、
3つの方法を比べてみました。
- BitmapをaddChild、そしてremoveChild
- Bitmap.bitmapDataを入れ替える
- Graphics.beginBitmapFilldで塗る
package {
import flash.display.Bitmap;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.utils.getTimer;
public class BitmapLoadTest extends Sprite
{
[Embed(source='../image.jpg')] private static const SampleImage:Class;
private var img:Bitmap = new SampleImage();
public function pen_BitmapLoadTest()
{
test_addChild(); // 24
test_swapBmpd(); // 6
test_fillBmpd(); // 20
}
private var testTimes:int = 10000;
private function test_addChild():void
{
var sTime:int = getTimer();
for(var i:int=0; i<testTimes; i++)
{
addChildAt(img, 0);
removeChild(img);
}
trace(getTimer() - sTime);
}
private function test_swapBmpd():void
{
var bmpCon:Bitmap = new Bitmap();
addChild(bmpCon);
var sTime:int = getTimer();
for(var i:int=0; i<testTimes; i++)
{
bmpCon.bitmapData = img.bitmapData
}
trace(getTimer() - sTime);
removeChild(bmpCon);
}
private function test_fillBmpd():void
{
var g:Graphics = graphics;
var w:int = img.width;
var h:int = img.height;
var sTime:int = getTimer();
for(var i:int=0; i<testTimes; i++)
{
g.clear();
g.beginBitmapFill(img.bitmapData);
g.drawRect(0, 0, w, h);
g.endFill();
}
trace(getTimer() - sTime);
}
}
}