公司的一款项目,在迭代开发阶段,突然发现运行速度越来越慢,界面切换卡顿时间在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,因为这款产品不需要单屏切换,只是不知道之前的白屏问题修复没有.

记录Qt的一个诡异Bug的更多相关文章

  1. ugui SetParent在安卓上一个诡异bug

    问题描述 我的环境:Unity3D 5.3.7 出问题机型:安卓模拟器.部分低配安卓机型(比如:红米2A) 以下代码是设置某个节点的父节点,在PC.Editor.大部分手机上都是正常的,但问题机型上, ...

  2. 一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG

    这一周线上碰到一个诡异的BUG. 线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功. 通过日志发现,从凌晨5:26分开始到5:56任务执行了三次,三 ...

  3. geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践

    眼看就要端午节了,屌丝还在写代码,话说过节也不给轻松,折腾了一天终于解决了一个BUG,并完成了老板安排的求DEM坡度的任务,那么就分两段来表. 一.BUG调试 首先记录一天的BUG调试,简单copy了 ...

  4. VS编译器优化诱发一个的Bug

    VS编译器优化诱发一个的Bug Bug的背景 我正在把某个C++下的驱动程序移植到C下,前几天发生了一个比较诡异的问题. 驱动程序有一个bug,但是这个bug只能 Win32 Release 版本下的 ...

  5. Safari 下用 "location.href = filePath" 实现下载功能的诡异 bug

    Safari 下的一些诡异 bug 我们已经领教一二,比如前文中说的 无痕浏览模式下使用 localStorage 的 API 就会报错.今天我们要讲的是利用 location.href = file ...

  6. 记一个逻辑bug

    1     从数据库中找出一个学生能选的毕业设计(毕设的select or not 字段表示本题目是否已经被选 此时就按照其值为n来查询) 2     用户选择某个毕设后,先更新毕设表(select ...

  7. 给dao层注入jdbcTemplate时的一个强行bug(jdbcDaoSupport不要随便用!用了要记得!)

    记录Dao层一个鱼唇至极的错误 这一天我在使用Spring的进行注解配置项目时, 我的Idea给我抛了一个如下的错误: Exception in thread "main" org ...

  8. 记录一次线上bug

    记录一次线上bug,总的来说就是弱网和重复点击.特殊值校验的问题. 测试场景一:        在3g网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后, ...

  9. 从一个小Bug,到Azure DevOps

    1. 一个小Bug 最近和同事提起一个几年前的 Bug,那是一个很小很小的 Bug,没什么技术含量.那时候我刚入职,正好公司卖了一款仪器到某个国家,但是那边说配套的软件运行不起来,一打开就报错.经过排 ...

随机推荐

  1. uva11292 Dragon of Loowater

    水题,排序遍历即可 #include<iostream> #include<cstdio> #include<algorithm> using namespace ...

  2. Electronic Payment App analysis

    Electronic Payment App is getting more and more popular now. People don't have to bring credit cards ...

  3. ATL中窗口句柄与窗口过程的关联方法

    ATL中采用了一种动态生成机器指令的方式进行窗口句柄与窗口对象进行关联,以是详细分析: CWindowImpl会在第一次调用Create时注册窗口类,该窗口类是的信息是在CWindowImpl的子类中 ...

  4. 那些年,我们一起追的面试题。。to be continued!!!

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被 ...

  5. javascript知识点总结----Function定义

    ---恢复内容开始--- 函数Function: 函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法,函数名实际上是一个指向函数的指针,不会与某个函数绑定 ...

  6. 如何禁止 Mac OS X 在外接设备上生成 .DS_Store 文件?以及如何批量删除 .DS_Store 文件?

    如何禁止 Mac OS X 在外接设备上生成 .DS_Store 文件?以及如何批量删除 .DS_Store 文件?原文链接:http://www.java2class.net/bbs/viewthr ...

  7. Android Studio中清单文件改versionCode和versionName没效果的原因

    在Android Studio中,项目的versionCode 和versionName 的控制不是在AndroidManifest.xml清单文件中更改的,而是在项目的build.gradle中更改 ...

  8. ( 转)UVM验证方法学之一验证平台

    在现代IC设计流程中,当设计人员根据设计规格说明书完成RTL代码之后,验证人员开始验证这些代码(通常称其为DUT,Design Under Test).验证工作主要保证从设计规格说明书到RTL转变的正 ...

  9. try it, then you know . Emacs

     原来Emacs能做时间管理 http://sachachua.com/blog/2012/07/transcript-emacs-chat-john-wiegley/ http://blog.csd ...

  10. leetCode 354. Russian Doll Envelopes

    You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...