【发布时间】:2012-03-29 09:18:10
【问题描述】:
我正在尝试制作塔防游戏,我正在实现游戏地图以在精确半径内快速查找实体。我使它与 std::list 一起工作(用于快速 push_back 实体指针,并且从列表的任何点删除都不错),但我发现迭代列表的 1500 个元素是超长的。我的游戏连 10 FPS 都达不到。我将展示 MSVS 在分析器中显示的内容:
在 getEntitiesInRadius 调用之后,下一个是 != 运算符,用于与列表末尾进行比较。接下来是 == 运算符调用。它在调试模式下运行。但我认为即使是调试迭代 1500 个元素也太长了。也许我对这个断言有误?
【问题讨论】:
-
迭代列表很慢。尝试更改为 std::vector。删除速度较慢,但 push_back (摊销)快且迭代速度快。
-
我觉得Debug模式下测试性能没有意义
-
+1 用于编写塔防游戏。我爱他们,他们是不够的。 :-)
-
@psur:启用调试符号(其开销几乎为零)与“调试模式”(您可以在其中进行边界检查等)不同。事实上,为了进行分析,同时启用调试符号和优化是很常见的。
-
你可以试试
std::deque,它本质上是一个向量列表。它结合了向量的低级效率和列表的灵活性。
标签: c++ performance stl linked-list containers