【发布时间】:2010-09-22 11:52:36
【问题描述】:
我正在开发一个高性能应用程序,所有调用都必须是合理的。我有一张地图,在每笔交易开始时使用一次,以进行我想改进的查找。地图在启动时加载,之后不会更改。
下面地图中的键是 std::string 但如果需要它可以更改为 char 数组。 C 或 C++ 作为解决方案很好。
typedef stdext::hash_map<std:string, int> symbols_t;
有没有人知道任何其他可以消除查找或更快的解决方案?
提前感谢您的帮助。
来自编辑的其他信息:
1. hash_map 目前有 350,000 个元素。
2. 每个键值的长度通常在 4 到 10 个字符之间。
3. 从第三方 API 回调接收信息。回调被赋予一个符号,在进行地图查找时用作键值。软件的其余部分由地图查找返回的 int 驱动。
感谢:感谢大家的意见。你给了我一些探索的途径。我一定会试试这些。我很感激帮助。
【问题讨论】:
-
我非常怀疑如果将
std::string替换为char*,整体性能会大不相同。但是,这肯定会使代码的可维护性大大降低。 -
哈希映射是 O(1),因此查找时间仅取决于计算哈希所需的时间。你调查过吗?
-
我想知道,这是你代码中最大的瓶颈吗?闻起来过早的优化。
-
@skimobear:如果你不知道你的 CPU 时间花在了哪里,你建议如何找到唾手可得的果实?这是优化 101。不要只是猜测,也不要只是遍历整个代码库,试图盲目地优化所有内容:找出需要优化和有益的地方,然后对其进行优化。如果地图只占用应用程序总执行时间的 0.01%,那么优化它完全是浪费时间。
-
@skimobear:你感觉不对。 ;) 除非您有无限的时间进行优化,否则您花在优化非性能关键代码上的每一秒都是少 秒,您可以花在重要的地方。因此,最终效果是您通过优化没有可衡量影响的地方来减慢代码。