当前位置: 首页 > news >正文

常见软件优化功能项

可落地的性能优化建议(保持功能不变)

异步设备状态获取

将耗时 I/O(如 getHscDevice、网络查询、B码状态)搬到工作线程,主线程仅合并结果并更新 UI。
对同 IP/设备增加短期缓存(如 1–3s TTL),避免同一周期重复查询。

定时与调度优化

改为单次 QTimer::singleShot 链式调度,避免定时器重入;在上次周期未完成时不触发新一轮。
为离线设备引入指数退避(如 5s→10s→20s),显著降低无效探测。

批量刷新与去抖

设备状态变更合并到 100–300ms 批提交,统一更新 UI,减少模型/布局频繁刷新。
告警列表同样使用去抖批量更新,避免高频 insert/remove。

UI 布局与绘制

避免在 paintEvent 中做任何状态计算,仅做绘制;计算放到周期逻辑或模型中。
尽量使用 QAbstractItemModel + 视图的 data 变化通知,替代手工 clearLayout + 重建控件。
控件复用:大列表/多告警时避免频繁 new/delete 控件。

数据结构与查找

将 QMap<QString, QMap<QString, DEVINFOS>> 替换为 QHash 或扁平 QHash<DeviceKey, DEVINFOS>(自定义哈希),减少字符串嵌套查找和拷贝。
规范唯一键(site|type|ip),减少拆分/拼接成本。

线程池与队列

使用 QThreadPool 限流并发度(根据 CPU/IO 设置 4–8),统一投递任务;避免自旋/忙等。
状态回调用 Qt::QueuedConnection,确保 UI 线程接收,避免锁竞争。
任务级超时控制(如每次 Ping ≤ 2–5s),超时即返回,防止线程被长期阻塞。

设备查询合并

对同站点设备的批量查询(若设备 API 支持)优先使用批量接口;否则串行/并行策略按设备数与网络延迟动态选择。
将不变参数(站点配置、设备类型映射)缓存到只读结构,避免每次构造。

日志与监控

限流日志(N秒内相同告警只记一次),降低 I/O 压力。
指标:周期耗时、成功率、并发数、UI 刷新次数;基于指标再调节阈值与间隔。

小优化

避免在循环内创建 QDateTime::currentDateTime() 多次,获取一次后复用。
字符串拼接统一用 QStringBuilder(加上 CONFIG += no_keywords 可用 % 优化拼接)。
长文本样式用样式类或 palette,避免频繁 setStyleSheet。

http://www.dtcms.com/a/352600.html

相关文章:

  • More Effective C++ 条款09:使用析构函数防止资源泄漏
  • 用友NCC 如何通过OpenApi 上传附件
  • 【计组】总线与IO
  • 【C++】智能指针底层原理:引用计数与资源管理机制
  • 菜鸡还没有找到工作(DAY41)
  • 永磁同步电机无速度算法--高频脉振正弦波注入到两相静止坐标系
  • 全新机器人遥操作触觉感知解决方案
  • postman使用教程
  • MATLAB 实现子图不规则排列
  • 【软考论文】论自动化测试方法及其应用
  • 这个AI有点懒
  • ZAM5404B:通道速率和信号带宽双提升,工业采集更高效
  • Tokenizer
  • 2025全国大学生数学建模B题思路+模型+代码9.4开赛后第一时间更新,备战国赛,算法解析支持向量机(SVM)
  • 华为云之CodeArts IDE Online平台部署Homepage个人导航页【玩转华为云】
  • k230 canMV 单路、双路、三路摄像头高清显示源代码
  • 数据存储工具 ——Redis
  • 构建面向人工智能决策的世界模型引擎所需的基本知识体系
  • 视觉工具:文字显示、图像标注与多模板匹配
  • Mysql——一条 update 语句的执行过程
  • Prometheus 指标类型
  • Solon Web 的两种 Context-Path 配置
  • Vuex 和 Pinia 各自的优点
  • MATLAB中函数的详细使用
  • Linux-孤儿进程和僵死进程
  • RAG中使用到的相关函数注释——LangChain核心函数
  • tracebox工具使用
  • LKT4202UGM耗材防伪安全芯片,守护您的消费电子产品
  • 从串口到屏幕:如何用C#构建一个军工级数据实时监控
  • JUC之synchronized关键字