绘制Graphics时发现其效率并没有想象中的高 在百度了一下资料后发现有提供BufferedGraphicsContext双缓冲图形绘制类 遂测试一下和Graphics的效率
Bitmap bit;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//准备工作
bit = new Bitmap("SingleBinder.bmp");
Bitmap bmp = new Bitmap(600, 600);
Bitmap bmp2 = new Bitmap(600, 600);
//要测试绘制的次数
List<int> list = new List<int>() { 10, 100, 200, 500, 1000, 5000, 10000, 100000,500000, 1000000 };
for (int i = 0; i < list.Count; i++)
{
int num = list[i];
Console.WriteLine("绘制" + num + "次分别用时:");
QueryPerformance queryPerformance = new QueryPerformance();
queryPerformance.Start();
using (Graphics g = Graphics.FromImage(bmp))
{
for (int j = 0; j < num; j++)
{
g.DrawImage(bit, 0, 0);
}
}
queryPerformance.Stop(true, "Graphics:");
QueryPerformance queryPerformance1 = new QueryPerformance();
queryPerformance1.Start();
using (BufferedGraphics myBuffer = BufferedGraphicsManager.Current.Allocate(Graphics.FromImage(bmp2), new Rectangle(0, 0, 600, 600)))
{
for (int j = 0; j < num; j++)
{
myBuffer.Graphics.DrawImage(bit, 0, 0);
}
myBuffer.Render();
}
queryPerformance1.Stop(true, "BufferedGraphicsContext:");
}
}
其中QueryPerformance类不用管 这里我是用来测试代码段运行时间的
结果为:
绘制10次分别用时:
Graphics:用时:0.989793110041725毫秒
BufferedGraphicsContext:用时:9.83290562976465毫秒
绘制100次分别用时:
Graphics:用时:3.54793027441803毫秒
BufferedGraphicsContext:用时:10.475779066649毫秒
绘制200次分别用时:
Graphics:用时:7.14049965571649毫秒
BufferedGraphicsContext:用时:13.2746862169552毫秒
绘制500次分别用时:
Graphics:用时:20.0767019362476毫秒
BufferedGraphicsContext:用时:27.705771344435毫秒
绘制1000次分别用时:
Graphics:用时:33.0940981828369毫秒
BufferedGraphicsContext:用时:44.2767216899311毫秒
绘制5000次分别用时:
Graphics:用时:149.109028030899毫秒
BufferedGraphicsContext:用时:104.348305945894毫秒
绘制10000次分别用时:
Graphics:用时:298.279918131175毫秒
BufferedGraphicsContext:用时:198.245788546308毫秒
绘制100000次分别用时:
Graphics:用时:2.94843866815182秒
BufferedGraphicsContext:用时:1.89926218937596秒
绘制500000次分别用时:
Graphics:用时:14.7493327859478秒
BufferedGraphicsContext:用时:9.59922588055911秒
绘制1000000次分别用时:
Graphics:用时:29.6224529786762秒
BufferedGraphicsContext:用时:19.0943273536848秒
从上面的结果来看 到5000次下时Graphics效率高一些5000次以后BufferedGraphics效率高一些。
由于时间原因 具体是在哪个段分开的就没有测试。
上述结果来看:BufferedGraphics 用于绘制碎片图片次数多的时候。
Graphics则用于碎片图片少 绘制次数少的时候。
当然此结果是以上述代码来判断的,也许其他写法能有不同的结果呢????