QStringList :: append()性能不佳

时间:2017-04-08 01:28:01

标签: c++ performance qt

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

这就是问题......递归扫描会进行大量检查,从JSON文件读取,从磁盘导入图标等等。然而,所有这些都比仅仅添加1或2个字符串要快几英里。约为模型中5%项目的QStringList

我做了一些基本的分析,发现如果我注释掉所有对QStringList::append()的调用,但是在所有疯狂的JSON读取,图标设置,颜色变化等等,它比我离开它们快3倍它明显变慢了......令人沮丧地慢了。

所以我决定将其范围缩小到仅约1%对{5}的项目调用QStringList::append()。以下是代码示例:

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类型真的那么慢吗?如果是这样,你会推荐什么选择?

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

  • 可能是内存压力:随着基于阵列的存储的增长,运行时停止并分配存储以保持同步。
  • 它也可能是递归的副作用;如果问题仍然存在,请尝试stack-based recursion