QT项目性能优化

QT项目性能调优小记

最近的项目用到了QT 5.5,项目在运行过程中出现了一段时间CPU占用率持续25%,并频繁断网的情况,遂决定对项目性能进行优化。

优化工具也是VS2010自带的性能分析工具,具体的使用方法参见:http://www.cnblogs.com/smark/archive/2011/10/12/2208039.html

其中可以选择“just my code”过滤出自己编写的代码。

通过性能分析工具可以找到占用CPU时间较多的函数,然后按照占有时间多少进行优化->再分析->再优化的步骤,多次优化后,将CPU占用率降到了2%以下。下面将对性能优化提升较大的几个优化步骤进行记录:

1.优化字符串格式化方法。

项目中有将QByteArray中的二进制数如”123”格式化成”31, 32, 33”的功能,使用的代码如下:

复制代码

 1 QByteArray msg = xxx
 2 
 3 QString  str;
 4 
 5 foreach (quint8 b, msg)
 6 
 7 {
 8 
 9     str.append(QString().sprintf(“%02X”, b));
10 
11 }

复制代码

 

当msg中包含6,7w个字符时,在lz酷睿2代i5的机器上,这段代码需要执行4到5s,因为其中的QString会调用new函数6,7w此,对性能影响极大。优化后的代码如下:

复制代码

 1 QString  buildString(const QByteArray& ba)
 2 
 3 {
 4 
 5 static const char ascii[] = {‘0’, ‘1’, ‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};
 6 
 7 QString buf;
 8 
 9 buf.resize(ba.length() * 3);
10 
11 int i = 0;
12 
13 foreach (quint8 b, ba)
14 
15 {
16 
17     buf[i] = ascii[b >> 4];
18 
19     buf[i + 1] =ascii[b & 0xF];
20 
21     buf[i + 2] = ‘, ’;
22 
23  
24 
25     i += 3;
26 
27 }
28 
29 if (i > 0)
30 
31     i –= 3;
32 
33 buf[i] = ‘\0’;
34 
35 return buf;
36 
37 }

复制代码

 

重新运行后,CPU耗时120ms左右,性能提升了几十倍。

2.优化界面刷新

在界面功能中有一处表格显示的功能,显示接收到的数据,在原始的代码中,当接收到一条数据,填充到表格上时,就调用一次表格scrollTo方法,当1s接收到2,3百条数据时,就会调用2,3此scrollTo方法,直接导致了界面频繁更新。

优化的方法是,考虑到人眼的观察能力,将刷新频率即scrollTo的函数调用固定为1s一次,减少了2,3百此的界面重绘,降低了CUP负载。

3.优化更新时戳功能

项目中有一处更新时戳的功能,记录某些状态是否已经超时,原始代码中通过QDateTime记录时戳,当数据到来时会调用QDateTime::currentDateTime更新时戳,当有大量数据到来时会频繁更新时戳,通过性能分析发现此处调用总CPU使用率的7%。考虑该时戳只需要统计时间间隔,遂优化后改用time.h中的clock函数打时戳,该函数返回至程序启动的毫秒数。再次进行性能分析显示此处调用降到CPU使用率的0.23%,性能提升明显。

4.优化数据库操作

项目中有一处数据库记录update操作,将QByteArray更新到数据库中,程序中使用了QT中的储存过程API,将QByteArray变量绑定到QSqlQuery对象上,参考代码如下:

复制代码

1 QSqlQuery query(db);
2 
3 QByteArray data;
4 
5 query.prepare(“update table set data = ? where id = ?”);
6 
7 query.bindValue(0, data);
8 
9 query.bindValue(1, id);

复制代码

 

其中data中包含6,7w个数据,其中发现程序在query.bindValue(data)上耗时最多,打印日志发现该data中的内容必定为可显示的ascii,遂将代码改为

1 query.bindValue(0, QString(data));

 

减少了QByteArray转换成QString的时间。

5.其他

其他优化还包括数据结构的调整,包括将2,3百条数据的数组改成map结构储存等。

 

总结

当然对软件的优化还是用遵循相应的原则,比如不要过早优化,在项目的初期以代码的稳定性,可读性,可扩展性为主要目标,只有当代码的性能不能满足需求时再进行适当的优化。因为往往对代码的优化会牺牲以上三个特效,所以在软件开发过程中,经常需要平衡这些特性。

### 回答1: Qt界面优化项目优化主要是指通过对Qt应用程序的界面进行优化,提高用户体验和程序的可用性。 在Qt界面优化项目中,首先需要优化应用程序的界面布局和设计。良好的界面设计可以让用户更加轻松和愉快地使用应用程序。此外,还需要进行控件的优化,比如调整控件的尺寸、颜色和字体等,以便更加符合用户的使用习惯和审美观。 其次,还需要进行界面交互优化。通过增强用户与应用程序之间的互动方式,使用户更方便地使用应用程序。比如,添加更多的鼠标提示信息,让用户更明白应用程序的功能;增加快捷键,使用户更快速地完成任务等。 除了界面和交互方面的优化,还需要对程序的性能和质量进行优化。这包括程序的响应时间、稳定性、安全性等方面。这需要通过对程序的代码进行优化,比如使用更高效的算法、减少冗余代码等方式,以提高程序的性能和质量。 综上所述,Qt界面优化项目优化主要是针对Qt应用程序的界面和交互进行改进,并通过优化程序的性能和质量,提高用户体验和程序可用性。 ### 回答2: Qt界面优化项目优化是对一个已有的Qt界面项目进行优化和改进,目的是提升界面的交互性,增强用户体验。该项目主要通过以下几个方面实现: 1. 界面设计方面:根据用户反馈和需求,重新设计界面,优化布局和色调,让用户操作更加直观和流畅。 2. 优化控件方面:通过改进UI控件,让用户操作更加便捷和高效。比如,增加搜索框、下拉选项、快捷键等,减少用户操作的步骤和时间。 3. 优化性能方面:对程序的运行速度和响应时间进行优化,让用户操作更加流畅和快速。通过减少不必要的计算和请求,优化程序内存和资源的使用。 4. 增强功能方面:在保持原有功能的基础上,增加新的实用功能,提高用户的操作效率和体验。 5. 兼容性和稳定性方面:确保程序在不同的操作系统环境中可以正常运行,并修复已知的bug,保证程序的稳定性和可靠性。 Qt界面优化项目优化需要对现有程序进行全面的分析和评估,针对现有问题进行有针对性的优化。通过不断的迭代和改进,最终实现要求的优化目标,提升用户体验和程序质量。 ### 回答3: Qt是一种跨平台的图形用户界面(GUI)框架,用于开发应用程序的图形界面。Qt界面优化项目优化是指对Qt框架下应用程序的图形界面进行优化,以达到更好的用户体验和更高的效率。 Qt界面优化项目优化通常包括以下方面: 1.美化界面,改善用户体验。利用Qt提供的丰富的界面控件和样式表,设计出美观、直观、易用的界面,以吸引更多的用户使用和喜爱该应用程序。 2.提高响应速度,增强应用程序的稳定性。对界面的渲染效率进行优化,采用异步加载等技术手段,降低加载时间和CPU用率,提高界面的响应速度和应用程序的稳定性。 3.优化代码结构和模块化设计,提升开发效率。调整应用程序的代码架构,使之更好地符合设计模式和代码规范,减少代码冗余和模块耦合,提升开发效率。 4.对不同平台进行定制化设计。针对不同平台的不同特性和用户需求,进行针对性的界面设计和优化,以得到最佳的用户体验和应用程序性能。 综上所述,Qt界面优化项目优化是对应用程序界面的综合优化,以提高用户体验、提升开发效率和提高应用程序性能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值