常见软件优化功能项
可落地的性能优化建议(保持功能不变)
异步设备状态获取
将耗时 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。