GDI与GDI+ 贴图性能对比
在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了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+ 贴图性能对比的更多相关文章
- GDI与GDI+性能比较
编写程序对GDI和GDI+绘制进行了比较,经过比较,GDI相对GDI+还是有一些性能优势的. 同时比较了每次绘制创建TGPGraphics对象和共用一个TGPGraphics对象的情况,两者性能相差不 ...
- Flash 矢量图和位图性能对比 导出为位图/缓存为位图 export as bitmap / cache as bitmap
大家都知道Flash处理矢量图比位图要慢,而具体的性能上对比也有不少的前人已经做过.http://bbs.9ria.com/forum.php?mod=viewthread&tid=2282 ...
- Intel和AMD的CPU性能对比图
Intel和AMD的CPU性能对比图:
- [原] KVM 环境下MySQL性能对比
KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...
- iOS中保证线程安全的几种方式与性能对比
来源:景铭巴巴 链接:http://www.jianshu.com/p/938d68ed832c 一.前言 前段时间看了几个开源项目,发现他们保持线程同步的方式各不相同,有@synchronized. ...
- StringBuilder和string.Format性能对比
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/sbformat.html StringBuilder的性能优于string.For ...
- SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比
原文:SQL点滴10-使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比 今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章 ...
- 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时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...
- Net Core下多种ORM框架特性及性能对比
在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先.但随着Dapper的出现,它的地位受到了威胁,本 ...
随机推荐
- iOS 10 UserNotifications 使用说明
本教程以贴代码为主.尽可能直观,少量说明. 注意:XCode8的需要手动开启主target Capabilities中的Push Notification. 关于创建多个target后真机测试的证书问 ...
- 关于String str =new String("abc")和 String str = "abc"的比较
String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...
- dsp 28377在线升级 实例总结
使用dsp品台28377d来实现在线升级的功能. 方案 : 升级程序 + 应用程序 升级程序 : 主要的目的是将上位机发送过来的应用程序数据(ccs编译生成的.bin文件)烧写到指定位置,之后在跳 ...
- 合并excel中多个sheet
Sub 合并当前工作簿下的所有工作表() Application.ScreenUpdating = False For j = 1 To Sheets.Count If Sheets(j).Name ...
- 通过nginx代理之后,获取客户端ip
1.相关nginx配置(通过header将客户端ip,host等信息传入) location ~ .*.do$ { proxy_set_header X-Real-IP $remote_addr; p ...
- [linux] 指令记录
1> 查看linux版本号 lsb_release -a cat /etc/redhat-release
- 学习PHP 逛的几个网站。
PHP 第一社区 http://www.php1.cn/ 51cto php开发 http://developer.51cto.com/col/1441/ phphub https://phphub. ...
- mySQL 50个查询系列
http://bubufx.com/detail-1749088.html http://www.jb51.net/article/67932.htm Student(S#,Sname,Sage,Ss ...
- Linux-ubuntu指令使用积累(长期更新)
alias cat cd cp ls mkdir mv rm sudo tar chmod 1. sudo 系统管理指令.放在其它指令之前使用,允许普通用户在root权限下执行部分或者全部 ...
- 转!!负载均衡器技术Nginx和F5的优缺点对比
对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器. 目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡 ...