【发布时间】:2011-07-06 15:37:49
【问题描述】:
我的游戏对象具有虚函数 Update()。有很多游戏对象(目前略多于 7000 个),并且循环调用所有这些对象的更新(除其他外)。我的同事建议我们应该完全删除虚拟功能。可以想象,这将需要大量的重构。
我见过this answer,但就我而言,分析意味着我必须更改很多代码。因此,在我考虑开始之前,我想我会在这里询问关于在这种情况下重构是否值得的意见。
请注意,我已经分析了循环的其他部分,并一直在尝试优化耗时最长的部分。我怀疑这种情况下的虚函数调用是我不应该担心的,但是在我分析之前我不能确定,并且在我更改代码之前我无法分析(这很多)。另请注意,一些更新函数非常小,而另一些则更大更复杂。
编辑:有多个答案可以提供很好的洞察力,因此将来偶然发现此问题的任何人都可以查看所有答案,而不仅仅是选定的答案。
【问题讨论】:
-
从您提供的信息来看,重构似乎很困难或不可能。原因是有几种不同类型的 Update() 函数。通过重构,您将得到的只是虚函数调用将被 switch-case 或 if 语句替换,它们的性能并没有更好。
-
居然有人问优化问题! :P ...像往常一样,在这些类型的问题上为-1,但不解释原因。无论如何,感谢所有回复的人。我所需要的只是另一种意见,我得到了。不知道为什么有些人一心想埋葬所有甚至有
optimize字样的东西 -
这里也一样。我正在开发自己的游戏引擎,目前在顶级机器上以大约 10fps 的速度运行。不知道在哪里看,但我不敢问。在我的引擎中,我使用了两个列表,一个用于所有对象(其数量超过系统中的活动对象 - 碰撞不会使对象处于活动状态),另一个用于活动对象。
标签: c++ optimization virtual-functions