在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了GDI , 与GDI+ 贴图性能。

这里假设在内存中已绘制完成一张图片,现需求显示在控件上,同时,总是更新全部区域。

GDI+ 实现

    private void PainDraw(Bitmap bitmap) {
pictureBox1.Invalidate();
//只调用Invalidate() 并非实时更新, 它会合并多个无效区,且延时显示, Update() 强制更新
pictureBox1.Update();
} private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
i++;
if (i > )
{
i = ;
}
e.Graphics.DrawImage(bitmap, new Rectangle(i, , bitmap.Width, bitmap.Height));
}

调用1000次,测帧速

	private void button2_Click(object sender, EventArgs e)
{
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); path = @"C:\Users\zhoupeng\Pictures\BackgroundDefault.bmp";
if (bitmap == null)
bitmap = new Bitmap(path); stopWatch.Start(); for (int i = 0; i < 1000; i++)
{
PainDraw(bitmap);
} stopWatch.Stop(); Console.WriteLine("帧率:{0}", 1000 / (stopWatch.ElapsedMilliseconds / 1000f)); }

结果:
帧率:88.81783
帧率:91.14108
帧率:92.28497
帧率:83.167

GDI 实现

int i = ;
private void SnapShot(PictureBox c, Bitmap bitmapsrc, IntPtr dc1)
{
IntPtr dc2 = GetWindowDC(c.Handle);
i++;
if (i > ) {
i = ;
} BitBlt(dc2, i, , bitmapsrc.Width, bitmapsrc.Height, dc1, , , TernaryRasterOperations.SRCCOPY); DeleteDC(dc2);
} private void button3_Click(object sender, EventArgs e)
{ System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); path = @"C:\Users\zhoupeng\Pictures\BackgroundDefault.bmp";
if (bitmap == null)
bitmap = new Bitmap(path); stopWatch.Start();
Graphics g = Graphics.FromImage( bitmap);
IntPtr dc1 = CreateCompatibleDC(g.GetHdc());
IntPtr dcbitmap;
IntPtr pOrig = SelectObject(dc1, dcbitmap = bitmap.GetHbitmap()); for (int i = ; i < ; i++)
{
SnapShot(pictureBox1, bitmap, dc1);
} DeleteDC(dc1);
DeleteObject(dcbitmap);
g.ReleaseHdc(dc1);
g.Dispose();
stopWatch.Stop(); Console.WriteLine("帧率:{0}", / (stopWatch.ElapsedMilliseconds / 1000f));
}

结果:
帧率:4651.163
帧率:4385.965
帧率:7812.5
帧率:5208.333

网上下载的另一份测试,更全面,具体:

https://files.cnblogs.com/files/a_bu/BitBltTest.rar

GDI与GDI+ 贴图性能对比的更多相关文章

  1. GDI与GDI+性能比较

    编写程序对GDI和GDI+绘制进行了比较,经过比较,GDI相对GDI+还是有一些性能优势的. 同时比较了每次绘制创建TGPGraphics对象和共用一个TGPGraphics对象的情况,两者性能相差不 ...

  2. Flash 矢量图和位图性能对比 导出为位图/缓存为位图 export as bitmap / cache as bitmap

     大家都知道Flash处理矢量图比位图要慢,而具体的性能上对比也有不少的前人已经做过.http://bbs.9ria.com/forum.php?mod=viewthread&tid=2282 ...

  3. Intel和AMD的CPU性能对比图

    Intel和AMD的CPU性能对比图:

  4. [原] KVM 环境下MySQL性能对比

    KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...

  5. iOS中保证线程安全的几种方式与性能对比

    来源:景铭巴巴 链接:http://www.jianshu.com/p/938d68ed832c 一.前言 前段时间看了几个开源项目,发现他们保持线程同步的方式各不相同,有@synchronized. ...

  6. StringBuilder和string.Format性能对比

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/sbformat.html StringBuilder的性能优于string.For ...

  7. SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比

    原文:SQL点滴10-使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比 今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章 ...

  8. 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)

    2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...

  9. Net Core下多种ORM框架特性及性能对比

    在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先.但随着Dapper的出现,它的地位受到了威胁,本 ...

随机推荐

  1. PCB走线分析——直角、差分、蛇形线

    PCB直角走线的影响   布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...

  2. 浪潮 NF5240M3 ,NP5540M3 服务器安装2008 R2

    1,服务器系统的安装会出现错误的地方一般都是在Raid 卡驱动 略过Raid 卡配置, 具体 http://jingyan.baidu.com/article/ca41422fddfd201eae99 ...

  3. Hibernate 继承映射

    @Entity@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn()public class Animal ...

  4. DOM笔记

    1.监听div内容修改 1.1 DOM2级中的mutation(变动事件)里的 DOMSubtreeModified 可以监听div内容修改 document.querySelector('.elem ...

  5. PHPExcel对于Excel中日期和时间类型的处理

    PHPExcel是一款优秀的处理Excel文件读写的开源PHP Library,能够给我们提供强大的Excel读写能力,本文针对Excel处理过程中关于日期和时间类型的处理进行深入的讨论.PHPExc ...

  6. Java开发中经典的小实例-(打印输入重复的值)

    import java.util.ArrayList;import java.util.Scanner;public class Test8 {    public static void main( ...

  7. css属性的选择对动画性能的影响

    现在手机的占比越来越高,各种酷炫页面层出不穷,这些特效都离不开css动画.说到css动画,主流的情况也就无非这两大类:位移和形变.而我们在写一个动画特效的过程中,如何去提升它的性能呢?当然首先我们需要 ...

  8. C#位运算讲解与示例

    首先每一个权限数都是2的N次方数 如:k1=2 ; //添加 k2=4 ; //删除 k3=8; //修改 ... 如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了. 如: p ...

  9. Nodejs学习总结 -Express 登录注册示例(二)

    项目创建后,我们来做个登录注册实例,详细操作步骤如下. 1.新建项目demo ,具体操作步骤参考上一章内容 https://www.cnblogs.com/Anlycp/ 2.添加mysql和sess ...

  10. angular中ng-repeat ng-if 中的变量的值控制器中为什么取不到

    这个问题的本质是:v-repeat会产生子scope,这时你在控制器里拿值,相当于父scope里面取子scope的值,因为Angular.js中作用域是向上查找的,所以取不到. 操作过程如下: 相关代 ...