Qt 4.5 新功能逐一看 – 性能优化

news/2024/7/10 4:37:22 标签: qt, 性能优化, 引擎, shapes, 优化, blog

大家对于Qt诟病比较多的地方就是性能,尤其在嵌入式或者比较低端的平台上。所以在Qt4.5中,第一条设计理念就是提升Qt的运行时性能,内部项 目代号称之为Falcon – 猎鹰,目的就是想让Qt飞起来。:-)

其实优化>性能优化在Qt4.5中,算是最最重要,最核心的改进了。为什么放在最后再说,是因为其中所包含的改进是在是太多了,也非常具体,很难简单的概 括。但是,从另一方面来说,对于Qt应用程序的开发者,除非有兴趣潜心研究,着实不需要关心具体的实现细节,原有的Qt应用,只需要运行在新的4.5之 上,你就可以感觉到性能的提升,而不用修改原有程序代码。

深入一些,那么究竟有哪些改进以及性能方面的提升?主要分三部分来说,分别是Qt本身绘图引擎优化,“热插拔”图形系统以及性能 Benchmark工具。

先来看看Qt本身绘图引擎优化

简而言之,在Qt4.5之前的版本中,Qt的Paint Engine在QPainter的操作过程中,有一些冗余的地方。在4.5中,这些细微,但是会影响全局性能的函数都被重新仔细分析和优化了,诸 如:QPainter::begin() / end(),save() / restore(), drawTextItem(),drawPixmap()。总体来说,对于一个实际的Widget控件绘图,提升将近50%的效率。下面这张图是一些 Widget在4.4和4.5的benchmark。

qteverywhere.com/wp-content/uploads/2009/03/overall-300x145.png" alt="Overall performance" width="300" height="145" />

Developer Blog here

除了QPaint的改进之外,4.5的Backingstore中也有不少改进,包括去除了许多不必要的QRegion的操作,以及是更加智能的 Update操作。

下面的表格展示了含有透明以及不透明控件的Backingstore的不同Update操作性能比较。

OperationQt 4.4Qt 4.5Boost
Full update (transparent widgets)4330 ms2446 ms1.8x
Full update (opaque widgets)3352 ms1464 ms2.3x
Scroll (opaque widgets)50231 ms3746 ms13.4x
Partial update (opaque widgets)4246 ms1567 ms2.7x
Complex update (opaque widgets)4966 ms2265 ms2.2x
Full update (opaque children)3376 ms1464 ms2.3x
Move (opaque widgets)50293 ms4188 ms12.0x
Mass update (opaque widgets)9560 ms1679 ms5.7x

Developer Blog here

另外有比较大改进的地方还有Graphic View。在Graphic Item绘图之前,加入了很多对于exposed areas, StyleOption, intersecting shapes, clips的预判断,这样在真正绘图的时候,速度就会得到提升。最直观的例子就是,在Qt4.4中的4000芯片例子,在Windows平台上平均可以获 得30%的提升,而在Linux上,使用Qt内置的Raster引擎和Graphic View,相比于原有的X11,则可以得到5到100倍的性能提升。

qteverywhere.com/wp-content/uploads/2009/03/chip-demo-299x243.png" alt="chip-demo" width="299" height="243" />

Developer Blog here

还有一些其他细微的改进,以及非图形方面的改进,诸如在X11平台上的绘图引擎中使用 XSHM (MIT-SHM)来提升绘图效率,以及通过QIODevice类的优化,提升了File IO的性能,继而提高了FileDialog中对象的加载速度等等。


http://www.niftyadmin.cn/n/1790827.html

相关文章

数据库基础——跟着【克里斯学SQL】哈哈。

前言: 很多同学呀,对数据库的操作仅仅只能在于Navicat 等第三方可视化的工具上面!!!! 这是可怕的,数据库的操作十分的重要,甚至,他是程序最重要的部分。 面试经常问题, 了解那个数据? 写一个sql…

MySQL 中索引的限制

MySQL 中索引的限制:1. MyISAM 存储引擎索引键长度总和不能超过1000 字节&#xff1b;2. BLOB 和TEXT 类型的列只能创建前缀索引&#xff1b;3. MySQL 目前不支持函数索引&#xff1b;4. 使用不等于&#xff08;! 或者<>&#xff09;的时候MySQL 无法使用索引&#xff1b…

Code Project:创建一个Qt RSS阅读器

我们将构建一个完整的应用程序&#xff0c;使其不必太费事便可重新发布为一个真正的开源应用程序。这个应用程序就是一个RSS阅读器&#xff0c;它允许用户添加自己的种 子&#xff0c;列出该种子上的内容&#xff0c;然后让用户在主应用程序自带的一个浏览器窗口中阅读这些内容…

this-应用

this : 这个this&#xff1a; 指的是调用 当前 方法&#xff08;函数&#xff09;的那个对象 1.写一个无序列表&#xff0c;里面有三个<li></li>,三个<div></div>&#xff1b; 分别为它们设置宽度、高度、背景颜色等&#xff1b; 再把<div></…

Code Project:创建一个媒体播放器

无论从功能还是大小来讲&#xff0c;Amarok都是一款优秀的KDE音乐播放器。但它很难称作是一款快速点选式的音乐播放器&#xff0c;因为它要通过好几次点击和一些 仔细的GUI导航才能听到音乐收藏中的音乐&#xff0c;这将给我们的CPU和大脑带来一定负担。这里我们将会构建所能想…

手机摄像头基础知识-3-评测

1.时间&#xff1a;a. rear->front switch time b.front->rear switch time c.system lag:从按下拍照键到实际采集到照片 d.capture response time:从实际开始拍照 到反馈到用户拍照结束 e.shot to shot: 拍摄两张照片之间的间隔&#xff1f;&#xff1f; f.Burst shot 连…

从在QT4中找不到QT3中的类 QT4与QT3的兼容

最近在研究QT, 但是教程是 QT3版本的.. 而自己现在的QT是QT4版本了。后多原来qt3的类都不在了。但是想想又有点不对劲啊&#xff0c;哪有新版本全部否定老版本的啊&#xff0c;这不是砸自己的脚吗&#xff1f;后来又查了下&#xff0c;才发现qt4还是支持qt3的。QT4中提供了大…

Windows下ElasticSearch及相关插件的安装

&#xff08;1&#xff09;在官网下载ElasticSearch压缩包。这里我下载的是elasticsearch-1.7.1&#xff08;下载地址&#xff1a;https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.zip&#xff09;。&#xff08;2&#xff09;选择电脑上的某个位…