公司的一款项目,在迭代开发阶段,突然发现运行速度越来越慢,界面切换卡顿时间在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. Java集合框架(常用类) JCF

    Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...

  2. 1219 spring3 项目总结

    Spring3 项目总结 列志华 (组长) http://www.cnblogs.com/liezhihua/ 团队guihub https://github.com/LWHTF/OrderingFo ...

  3. 在win7下将CapsLock按键变成esc

    我喜欢用vim来编辑,经常要按到esc,但是去按那个按键确实比较的远,而且CapsLock这个按键对我来说着实有些鸡肋,所以就想在win7上也能像ubuntu那样把capslock映射为esc,在网上 ...

  4. web前端开发资源分享:学习计划及资料推荐

    HTML & CSS W3C官网 HTML学习  CSS学习 书籍: <Head First HTML与CSS.XHTML(中文版)><CSS禅意花园(修订版)> 视频 ...

  5. 接口与继承ppt作业

    问:为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 答:子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化.不 ...

  6. xml ---DOM操作

    package day03.xml; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; ...

  7. SQLServer : EXEC和sp_executesql的区别

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql.通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...

  8. android 简单打jar包

    先建议一个moduel,先写一个下载图片代码: public class LoadTest extends AsyncTask<Void,Void,byte[]>{ public stat ...

  9. Python 2.7_发送简书关注的专题作者最新一篇文章及连接到邮件_20161218

    最近看简书文章关注了几个专题作者,写的文章都不错,对爬虫和数据分析都写的挺好,因此想到能不能获取最新的文章推送到Ipad网易邮箱大师.邮件发送代码封装成一个函数,从廖雪峰大神那里学的  http:// ...

  10. gfw列表

    https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt