Qt程序CPU过高怎么定位解决?性能优化

news2025/1/23 17:26:43

自己开发的一个程序采用多线程调用url从网络上下载股票数据,一旦开启程序就特别的卡;想着优化一下;授之于鱼,不如 授之以渔;

1.CPU过高排查方法

(1)打开vs的性能探测器;

(2)勾选CPU,然后点击开始按钮

 (3)运行一段时间后,点击停止,分析一会会出现下面的CPU使用报告

 (4)根据这个报告的CPU使用情况,查找函数解决CPU占用高的情况;

我发现三处CPU占用过高的情况;

(1)QVector<HisDayMotony> push_front()在进行大量数据存储时非常的耗CPU,CPU总的使用率达到了80%;

分析原因,是QVector的内部存储结构导致,push_front每次都会调整QVector的内部存储结构,然后动态的申请大的空间,再去复制数据到大的内存空间,这样非常耗性能;解决办法,采用push_back代替;但是用push_back,再次分析后,CPU占用了达到了40%左右,还是很高,分析原因,随着插入数据的增加,发现还是会调用reallco函数不断的申请更大的空,然后复制数据去更大的空间;所以又采用批量设置QVector的大小,批量创建对象,然后将数据设置进去;

//解析每日的数据
            QJsonArray dayArray = mainobject.value("hisday").toArray();//解析的数组大小
            QVector<HisDayInfo> HisDayArray(dayArray.size());//根据json数组大小,创建同等数量的空对象
            for (int i = 0; i < dayArray.size(); i++)//遍历循环将数据设置进去
            {
                QJsonArray item = dayArray.at(i).toArray();
                if (item.size() >= 10)
                {
                    //HisDayInfo info;
                    HisDayArray[i].strTime = item.at(0).toString();
                    HisDayArray[i].strOpenPrice = item.at(1).toString();
                    HisDayArray[i].strClosePrice = item.at(2).toString();
                    HisDayArray[i].strRisePrice = item.at(3).toString();
                    HisDayArray[i].strRisePersent = item.at(4).toString();
                    //去除末尾的%号
                    if (HisDayArray[i].strRisePersent.right(1) == '%')
                    {
                        HisDayArray[i].strRisePersent = HisDayArray[i].strRisePersent.left(HisDayArray[i].strRisePersent.size() - 1);
                    }

                    HisDayArray[i].strLowsPrice = item.at(5).toString();
                    HisDayArray[i].strHighsPrice = item.at(6).toString();
                    HisDayArray[i].strDealMoney = item.at(8).toString();
                    HisDayArray[i].strChangeHands = item.at(9).toString();
                    if (HisDayArray[i].strChangeHands.right(1) == '%')
                    {
                        HisDayArray[i].strChangeHands = HisDayArray[i].strChangeHands.left(HisDayArray[i].strChangeHands.size() - 1);
                    }
                    //stockInfo.scHisDayInfo.push_back(info);
                }
            }
            stockInfo.scHisDayInfo=std::move(HisDayArray);//通move函数将数据传给返回遍历进行返回,避免二次构造;

(2)自定义结构体中使用的string变量,每次使用string保存字符串时,需要创建大量的空间,会占用很高的CPU;

解决办法,就是用QSting代替QString,发现CPU的使用率降低了;

(3)再次分析发现QJsonObject转QVariantMap,然后将QVariantMap析构也占用了很高的CPU;

这里我是为了调试查看内容的,QJsonValue调试时无法直接查看变量内容,所以加了这个转换来看内容,直接删除;并且把此处的QVector也是批量申请内存空间,代替push_back;

最终结果: 

通过上面三处的修改之后,发现CPU使用率由原来的平均80%,降低到25%;下载数据的速度也提高了很多,之前下载4200多个股票的历史数据和实时数据大概要300秒左右;经过性能优化后,下载速度大大提高只要60秒左右;

自己开发了一个股票软件,有很多特殊功能,有兴趣的扫码获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android端推送消息之极光推送

推送方式 轮询 --实现方式: 周期性主动获取网络中的数据; --缺点: 费电, 费流量; SMS --实现方式: 服务器端向手机端发送短信, 手机监听短信广播, 将拦截的短信信息进行显示; --优点: 省电, 省流量, 在没有网络的偏远地点也能接收到推送消息; --缺点: 费钱, 一毛钱一条;…

国产BI厂商:数字化时代的“卖水人”,扎根本土商业生态(上)

“没有数据&#xff0c;就没有竞争力。”随着中国经济以数字经济为重要引擎转向高质量发展道路&#xff0c;数据已成为推动经济增长的关键要素。Navesink顾问公司的创始人Thomas Redman认为&#xff0c;企业需要建立起对数据的组织和处理能力&#xff0c;只有这样才能收获大数据…

前端常用vscode插件

打开vscode配置 commandshiftP 选择Open User Setting&#xff08;首选项&#xff1a;打开用户设置(JSON)&#xff09; 1 Prettier - Code formatter "[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[typescri…

日常记录:天梯赛练习集L1-043 阅览室

题目&#xff1a; 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时&#xff0c;管理员输入书号并按下S键&#xff0c;程序开始计时&#xff1b;当读者还书时&#xff0c;管理员输入书号并按下E键&#xff0c;程序结束计时。书号为不超过1000的正整数。当管理员…

信安大佬真的用kali吗?

Kali只是现在网络安全和kali比较火的一个操作系统 下面我为大家讲讲kali系统都有那些优点 Kali介绍Kali Linux是基于Debian的Linux发行版&#xff0c; 设计用于数字取证操作系统。面向专业的渗透测试和安全审计。 集成化&#xff1a;预装超过300个渗透测试工具兼容好&#x…

【你听说了吗】GPT-5据说已经学完了世界上现存所有的视频

文章目录前言一、GPT-5会带来什么&#xff1f;二、我们该怎么办&#xff1f;总结前言 最近半年要说最火的产品&#xff0c;无疑是ChatGPT &#xff0c;很多同学都在用 GPT 帮助自己工作&#xff0c;学习&#xff0c;提高效率&#xff01;尤其是 GPT4&#xff0c;性能强 GPT3.5…

鸟哥的Linux私房菜 学习 Shell Scripts

第十三章、学习 Shell Scripts 重点回顾 shell script 是利用 shell 的功能所写的一个『程序 (program)』&#xff0c;这个程序是使用纯文字档&#xff0c;将一些 shell 的语法与命令(含外部命令)写在里面&#xff0c; 搭配正规表示法、管线命令与数据流重导向等功能&#xf…

代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、 53. 最大子序和 动态规划

打卡第53天 今日任务 1143.最长公共子序列 1035.不相交的线 53.最大子序和 动态规划 1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这…

i.MX6ULL 开发板-Mqtt 移植

转载&#xff1a;http://e.betheme.net/article/show-149636.html?actiononClick PS&#xff1a; 订阅主题&#xff0c;命令如下&#xff1a; mosquitto_sub -h localhost -t "mqtt" -v 发布主题&#xff0c;命令如下&#xff1a; mosquitto_pub -h localhost -…

96年阿里P7晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

使用qt调用c#编写的dll库

问题背景 我需要使用qt编写界面程序来操作设备&#xff0c;设备厂家提供了一个使用C#编写的dll库&#xff0c;里面包含了各种操作设备的函数。而我不想学习C#&#xff0c;使用C来调用dll库的话&#xff0c;不论是显示调用&#xff08;提供h文件&#xff0c;dll文件&#xff09…

【操作系统复习】第4章 进程同步

进程同步的概念 主要任务 ➢ 使并发执行的诸进程之间能有效地共享资源和相互合作&#xff0c;从而使程序的执行具有可再现性。 进程间的制约关系 ➢ 间接相互制约关系(互斥关系) • 进程互斥使用临界资源 ➢ 直接相互制约关系&#xff08;同步关系&#xff09; •…

GDPU C语言 天码行空5

&#x1f648; 仅供参考,欢迎指正 填空(语法题) 1. 9.502. 03. 2.504. 3.505. 16. 07. 78. 09. 110. 011. 112. 113. 014. 115. 2416. 6017. 018. 319. 020. 64⭐ 直接拷贝输出就好 #include<stdio.h>int main(){// 1 // printf("%…

Java基础——日志,Logback入门

日志 &#xff08;1&#xff09;程序中的日志&#xff1a; 程序中的日志可以用来记录程序运行过程中的信息&#xff0c;并可以永久存储。&#xff08;2&#xff09;日志技术具备的优势&#xff1a; 可以将系统执行的信息选择性的记录到指定位置&#xff08;控制台&#xff0…

GEE:支持矢量机(SVM)分类教程

在Google Earth Engine平台上,使用支持向量机(SVM)进行土地利用分类是一种强大的技术。在本文中,我们将介绍如何使用GEE和SVM算法进行土地利用分类。 结果展示, 具体过程如下: 数据准备 首先,我们需要准备用于分类的地理空间数据,包括土地覆盖类型和地表特征数据。GE…

队列知识及编程练习总结

目录 一、背景知识 二、队列的应用 &#xff08;一&#xff09;在Spring中的应用 &#xff08;二&#xff09;在其他框架中的应用 &#xff08;三&#xff09;在实际开发中的应用 三、相关编程练习 &#xff08;一&#xff09;用队列实现栈 &#xff08;二&#xff09…

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第8关&#xff1a;多级指针翻译操作验证其它方案&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关&#xff1a;多…

DCT-Net工业级轻量化人像漫画

工业级轻量AI人像漫画开源模型技术解析_哔哩哔哩_bilibiliModelScope 旨在打造下一代开源的模型即 服务共享平台&#xff0c;为泛 AI 开发者提供灵活、易用、低成本的一站式模型服务产品&#xff0c;让模型应用更简单&#xff01;欢迎使用魔搭社区&#xff1a;ModelScope.cn, 视…

JVM:线上服务CPU爆满,如何排查(三)

0. 引言 前一段时间出现了一个正则表达式引起的线上CPU爆满的问题&#xff0c;一开始没有在第一时间定位到问题&#xff0c;这里也特此记录一下&#xff0c;同时也系统的梳理下CPU爆满问题的排查思路和方法&#xff0c;为后续的同学提供参考。 1. CPU爆满问题产生的原因 我们…

八大排序算法之插入排序、希尔排序、选择排序

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 本篇主要讲解八大排序算法中的三种排序&#xff0c;分别是&#xff1a;插入排序、希尔排…