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

来源:互联网 发布:centos arm linux gcc 编辑:程序博客网 时间:2024/05/13 19:26

大家对于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。

Overall performance

Developer Blog here

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

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

OperationQt 4.4Qt 4.5BoostFull update (transparent widgets)4330 ms2446 ms1.8xFull update (opaque widgets)3352 ms1464 ms2.3xScroll (opaque widgets)50231 ms3746 ms13.4xPartial update (opaque widgets)4246 ms1567 ms2.7xComplex update (opaque widgets)4966 ms2265 ms2.2xFull update (opaque children)3376 ms1464 ms2.3xMove (opaque widgets)50293 ms4188 ms12.0xMass 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倍的性能提升。

chip-demo

Developer Blog here

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