在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了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. phprpc的简单使用

    PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出重定向的.支持分级错误处理的.支持会话的.面向服务的高性能远程过 ...

  2. 16-腾讯-intership-面试

    问题 问:说一下在浏览器那里输入一个网址,会发生什么?答:DNS服务器解析,TCP三次握手,建立连接,然后bilibala............... 问:你对http相关协议熟悉吗?答:我问是ge ...

  3. java subList方法小记

    在java中,我们有时候需要对一个list进行拆分处理,这个时候就需要用到list的切割方法subList. 我们知道list里面的序号起始是从0开始的,所以一个含有23条数据的list,它的序号是从 ...

  4. codevs1409 拦截导弹2

    [问题描述]一场战争正在 A 国与 B 国之间如火如荼的展开.B 国凭借其强大的经济实力开发出了无数的远程攻击导弹,B 国的领导人希望,通过这些导弹直接毁灭 A 国的指挥部,从而取得战斗的胜利!当然, ...

  5. 用Charles抓取https接口数据

    由于我之前抓取的某APP接口全面换上了https接口,导致我在抓取过程中遇到了很大的困境 用Charles无法获取到内容,由于现在已经搞定了,无法展示当时的错误信息,我从网站找了一个类似的错误信息 首 ...

  6. ES6 Map/WeakMap

    最近项目用ES6来写,许多语法都要逐步熟悉呀,今天收藏下Map用法 1.Map构造器 // 字符串作为key, 和JS对象类似 var map = new Map() // set map.set(' ...

  7. WebLogic中的一些基本概念

    WebLogic中的一些基本概念   WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来,下面是一 ...

  8. Python操作redis

    安装好吧,我承认我只会最简单的安装 sudo apt-get install Redis-server Python 支持包: (其实就一个文件,搞过来就能用) sudo apt-get instal ...

  9. 编译2.4.X apache 常见错误

    安装高版本的 apr    apr-util ./configure prefix=/usr/local/apr   ./configure prefix=/usr/local/apr-util -- ...

  10. htmlFormat

    import java.text.SimpleDateFormat; import org.apache.log4j.HTMLLayout; import org.apache.log4j.Layou ...