记录Qt的一个诡异Bug

  公司的一款项目,在迭代开发阶段,忽然发现运行速度愈来愈慢,界面切换卡顿时间在2秒以上.通过和某个不卡版本的对比,惊奇的发现程序二进制都如出一辙,就几个图片资源和脚本不同.通过差很少一天的排查,发现是新加的splash程序影响了主程序的速度-.-测试

  由于主程序设计的缘由,启动大概须要10秒左右,为了避免在黑的X界面等过久,为了界面的友好,咱们独立作了个splash程序,用于在主程序启动以前显示友好提示界面,splash程序的生命周期是20秒,以后将本身退出.然而奇怪的是就是这个splash程序,即时在彻底退出以后,主程序的响应速度也会慢上不少,切换界面须要卡顿2秒以上...,百思不得其解,对于操做系统而言,进程是互相独立的,而两个程序又没有资源上的访问冲突,即时splash程序写的再烂,在退出以后系统也会回收相应的资源,理论上不会对主程序形成任何影响.优化

  通过组内讨论和思考后,我把问题定位在Qt库的问题,公司以前一直使用的是Qt4.6.3版本的库(为何用这个版本的库也是有历史缘由的),为了验证想法,我先用SDL写了个替代的splash程序测试,发现果真主程序就恢复正常了,而后再编译了个4.8.4版本的库替换进去,果真用原来的splash也不卡了,主程序的响应速度也比4.6.3快了一大截-.-操作系统

  果真是Qt库自己的bug,这也就解释了为何独立的两个进程会互相影响.为何用Qt4.6.3这个图像运算没MMX优化的老版本也是由于以前踩太高版本的一个坑.咱们有几款系统只有一个屏幕,须要主程序和FLASH之间不断切换,结果Qt4.7以上的版本在切换的过程当中,有概率出现白屏的现象,可是进程仍是在运行.以前也是排查了好久才发现是Qt库的问题,我猜想是几个程序对OpenGL的调用致使显卡资源锁住了.没办法才把Qt版本退回到了4.6.3(这个版本不会白屏,可是图形效率奇低,甚至连防抖处理都没,美工作的图片毛边明显).设计

  最终决定这款产品上最新的4.8.7,由于这款产品不须要单屏切换,只是不知道以前的白屏问题修复没有.生命周期

相关文章
相关标签/搜索