在我的项目中,我有一个递归迭代 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/