c++ - QStringList::append() 性能不佳

标签 c++ performance qt

在我的项目中,我有一个递归迭代 QTreeView 模型的函数。在某些时候,我将值附加到存储在每个项目的 Qt::UserRole 中的 QStringList

这就是问题所在...递归扫描会进行大量检查、从 JSON 文件读取、从磁盘导入图标等,但是,所有这些都比简单地将 1 或 2 个字符串附加到 快得多QStringList 用于模型中大约 5% 的项目。

我做了一些基本的分析,发现如果我注释掉所有对 QStringList::append() 的调用,但留下所有疯狂的 JSON 读取、图标设置、颜色更改等,它是比我把它们留在里面快 3 倍。而且速度明显变慢……慢得令人沮丧。

所以我决定将它缩小到只有 1 次调用 QStringList::append() 大约 5% 的项目。下面是代码示例:

QStringList rightClickList = mainItem->data(Qt::UserRole+8).toStringList();
rightClickList.append("customName");//comment this out and it runs 3x faster 
                                    //than allllll the recursive scanning combined!
mainItem->setData(rightClickList, Qt::UserRole+8);

我估计给定模型中所有项目的大约 5% 有任何 QStringList 更改。剩下的就不管了。 QStringList 类型真的那么慢吗?如果是这样,您会推荐什么替代方案?

感谢您的宝贵时间!

最佳答案

  • 可能是内存压力:随着基于数组的存储增长,运行时停止并分配存储来跟上。
  • 它也可能是递归的副作用;如果问题仍然存在,请尝试 stack-based recursion .

关于c++ - QStringList::append() 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289228/

相关文章:

python - 如何使 QTableWidget 中的单元格只读?

c++ - Qt 小部件和指针

c++ - 修改此函数以从 ';' 分隔文件读取

c++ - 使用 boost 检查端口可用性

c++ - 无序多集的散列/crc 算法

python - 如何加快读取多个文件并将数据放入数据框中?

c++ - 链接错误、未解析的符号 QString、QComboBox、QSlider、QAbstractButton、QRadioButton、

c++ - 在 C++ 项目中包含 .idl 文件

c# - .RemoveAll 和 .Where 在 C# 中的性能差异

performance - sqlite即使索引也很难查询