Qt 4.5 新功能逐一看 - 性能优化 (一)
2009-06-09 15:51
211 查看
大家对于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。
Developer Blog here
除了QPaint的改进之外,4.5的Backingstore中也有不少改进,包括去除了许多不必要的QRegion的操作,以及是更加智能的Update操作。
下面的表格展示了含有透明以及不透明控件的Backingstore的不同Update操作性能比较。
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倍的性能提升。
Developer Blog here
还有一些其他细微的改进,以及非图形方面的改进,诸如在X11平台上的绘图引擎中使用 <!--[if !ppt]--><!--[endif]-->XSHM (MIT-SHM)来提升绘图效率,以及通过QIODevice类的优化,提升了File IO的性能,继而提高了FileDialog中对象的加载速度等等。
其实性能优化在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。
Developer Blog here
除了QPaint的改进之外,4.5的Backingstore中也有不少改进,包括去除了许多不必要的QRegion的操作,以及是更加智能的Update操作。
下面的表格展示了含有透明以及不透明控件的Backingstore的不同Update操作性能比较。
Operation | Qt 4.4 | Qt 4.5 | Boost |
---|---|---|---|
Full update (transparent widgets) | 4330 ms | 2446 ms | 1.8x |
Full update (opaque widgets) | 3352 ms | 1464 ms | 2.3x |
Scroll (opaque widgets) | 50231 ms | 3746 ms | 13.4x |
Partial update (opaque widgets) | 4246 ms | 1567 ms | 2.7x |
Complex update (opaque widgets) | 4966 ms | 2265 ms | 2.2x |
Full update (opaque children) | 3376 ms | 1464 ms | 2.3x |
Move (opaque widgets) | 50293 ms | 4188 ms | 12.0x |
Mass update (opaque widgets) | 9560 ms | 1679 ms | 5.7x |
另外有比较大改进的地方还有Graphic View。在Graphic Item绘图之前,加入了很多对于exposed areas, StyleOption, intersecting shapes, clips的预判断,这样在真正绘图的时候,速度就会得到提升。最直观的例子就是,在Qt4.4中的4000芯片例子,在Windows平台上平均可以获得30%的提升,而在Linux上,使用Qt内置的Raster引擎和Graphic View,相比于原有的X11,则可以得到5到100倍的性能提升。
Developer Blog here
还有一些其他细微的改进,以及非图形方面的改进,诸如在X11平台上的绘图引擎中使用 <!--[if !ppt]--><!--[endif]-->XSHM (MIT-SHM)来提升绘图效率,以及通过QIODevice类的优化,提升了File IO的性能,继而提高了FileDialog中对象的加载速度等等。
相关文章推荐
- Qt 4.5 新功能逐一看 – 性能优化
- Qt 4.5 新功能逐一看 – 性能优化
- Qt 4.5 新功能逐一看 - 性能优化 (二)
- 跟踪qt 4.5新功能
- QT-Embedded程序性能优化方法
- ORACLE学习笔记--性能优化3
- IOS 性能优化的建议和技巧
- 完全优化MySQL数据库性能的八大巧方法
- Android性能优化精华帖(持续更新...)
- asp.net网站性能优化2则
- PHP性能优化的技巧
- SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化
- JBossAS性能优化和瘦身系列(5):Log4j
- 几个ajax js性能优化和内存泄露问题及检测分析工具
- web前端优化vue ssr pwa技术突破性能瓶颈让页面飞
- tomcat服务器的性能优化
- SQL SERVER性能优化综述
- 精通安卓性能优化-第七章(四)
- jQuery性能优化与技巧
- 性能优化之加载