使用QStrings作为密钥的QHash查找速度

Rya*_* R. 4 c++ hash performance qt qt4

我需要在a上绘制动态叠加层QImage.叠加的组成部分用XML定义,并解析QHash<QString, QPicture>为QString是名称的位置(例如"十字准线"),并且QPicture是独立于分辨率的绘图.然后,我在运行时确定的位置处绘制叠加的组件.

示例:我的QHash中有10张图片,构成了HUD中的每个可能元素.在特定的视频帧期间,我需要在图像的不同位置绘制其中的6个.在下一帧期间,某些事情发生了变化,现在我只需要绘制其中的4个,但其中2个位置已经改变.

现在我的问题是:如果我想快速完成这个,我应该重新定义我的QHash QHash<int, QPicture>并枚举键来抵消字符串比较造成的开销; 或者这些比较不会对绩效产生很大影响?我可以很容易地转换为整数键,因为XML解析器和叠加组合器是完全独立的类; 但我想在整个应用程序中使用一致的数据结构.

我是否应该克服我对一致性和可重用性的渴望,以提高性能?如果我这样做会非常重要吗?

sbk*_*sbk 6

Gareth当然有正确的答案.我想稍微扩展一下.

  1. 首先考虑一致性和可重用性.尽量不要引入巨大的性能瓶颈; 很难取得平衡
  2. 设定现实的绩效标准.我猜你正在制作类似游戏的东西,合理的标准是"在我的开发机器上维持25 fps"
  3. 您的申请是否符合标准?是?足够的优化,转到5.
  4. 分析您的应用程序,优化占用时间最多的部件.回到3.
  5. 利润!

回到你的具体问题,如果哈希表中的元素数量小于或大约为100,那么密钥类型可能根本不重要.


Gar*_*ell 5

答案是你应该分析你的应用程序.只有当您发现字符串比较成为瓶颈时,才应实施替代策略.过早优化可能是浪费时间.

首先,确保程序的正确性,即确保它通过所有单元测试.(我假设正确性和性能是正交的 - 这通常是一个合理的假设,除非您编写一个硬实时应用程序)然后,基准测试以确定性能是否符合您的要求.只有当基准测试显示性能太低时,才应优化,然后按照分析器的指导进行.通过重新运行单元测试,可以检查您所做的任何优化是否正确.