我需要在QImage
上绘制动态叠加层。叠加的组成部分以XML定义,并解析为QHash<QString, QPicture>
,其中QString是名称(例如“十字准线”),QPicture
是独立于分辨率的绘图。然后,我在运行时确定的位置处绘制叠加的组件。
示例:我的QHash中有10张图片,构成了HUD中的每个可能元素。在特定的视频帧期间,我需要在图像的不同位置绘制其中的6个。在下一帧期间,某些事情发生了变化,现在我只需要绘制其中的4个,但其中有2个已经改变了。
现在问我的问题:如果我想快速完成这项工作,我是否应该将我的QHash重新定义为QHash<int, QPicture>
并枚举键以抵消字符串比较造成的开销;或者这些比较不会对绩效产生很大影响?我可以很容易地转换为整数键,因为XML解析器和叠加组合器是完全独立的类;但我想在整个应用程序中使用一致的数据结构。
为了提高性能,我是否应该克服我对一致性和可重用性的渴望?如果我这样做会非常重要吗?
答案 0 :(得分:6)
Gareth当然有正确的答案。我想稍微扩展一下。
回到你的具体问题,如果哈希表中的元素数量小于或大约为100,那么密钥类型可能根本不重要。
答案 1 :(得分:5)
答案是您应该分析您的应用。只有当您发现字符串比较成为瓶颈时,才应实施替代策略。过早优化可能是浪费时间。
首先,确保程序的正确性,即确保它通过所有单元测试。 (我假设正确性和性能是正交的 - 这通常是一个合理的假设,除非您编写一个硬实时应用程序)然后,基准测试以确定性能是否符合您的要求。只有当基准测试显示性能太低时,才应优化,然后按照分析器的指导进行。通过重新运行单元测试,可以检查您所做的任何优化是否正确。