Graphics和BufferedGraphicsContext 效率测试对比

53 篇文章 2 订阅

绘制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则用于碎片图片少 绘制次数少的时候。

当然此结果是以上述代码来判断的,也许其他写法能有不同的结果呢????

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值