在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了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. 【2014-05-06】C++ 设计模式----单例模式

    1.何为单例模式? 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点(static).可能有人会想这和全局变量有什么区别呢? 通常我们可以让一个全局成员变量使得一个 ...

  2. 监狱3D指纹门禁系统解决方案

    由于监狱的行业特殊性,其安全性对社会的安定团结具有重大影响力.因此,采用高新技术来建立监狱的安全屏障,提高监狱安全的规范化.科学化管理水平.用高效的技术防范手段对监狱安全实行事前的主动的防范,保障社会 ...

  3. heart beat/心跳包

    为什么需要heart beat/心跳包?因为tcp keep-alive不能满足人们的实时性的要求,就是这么简单. socket的长时间连接的话,是需要心跳包.心跳包就是维持双方的连接,每隔一段时间发 ...

  4. jQuery(一)

    1,浏览器内核不同-->兼容性问题-->不同浏览器相对应不同代码 2,javascript框架, 只写代码,不用考虑浏览器兼容问题  prototype.mootools.jQuery(目 ...

  5. BLE教程 - 官方tutorial翻译

    关键术语和概念 1. Generic Attribute Profile(GATT)GATT配置文件是一个通用规范,用于在BLE链路上发送和接收被称为"属性"的数据块.目前所有的B ...

  6. oracle过滤字母

     select regexp_replace(col,'[A-Za-z]') from dual;  --> 12345col 列名 

  7. codeforces 744C Hongcow Buys a Deck of Cards

    C. Hongcow Buys a Deck of Cards time limit per test 2 seconds memory limit per test 256 megabytes in ...

  8. Lucene 简单API使用

    本demo 简单模拟实现一个图书搜索功能. 模拟向数据库添加数据的时候,添加书籍索引. 提供搜索接口,支持按照书名,作者,内容进行搜索. 按默认规则排序返回搜索结果. Jar依赖: <prope ...

  9. golang os/exec 执行外部命令

    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. func LookPath(file string) (st ...

  10. ireport5.6+jasperreport6.3开发(五)--以javabean为基准的报表开发(action关联)

    这里的是定方法主要参照sturts2-jasperreport-plugin的完成方法(其实就是抄的) PDF的样子是这样的两页的pdf 然后action的配置是这样的(不要在意格式) @Parent ...