我所处的情况是,我的游戏对象具有虚拟函数 Update()。有很多游戏对象(目前略多于 7000 个),并且循环调用所有这些对象的更新(除其他外)。我的同事建议我们应该完全删除虚函数。正如您可以想象的那样,这将需要大量的重构。
我见过这个答案但就我而言,分析意味着我必须更改大量代码。因此,在我考虑开始之前,我想我应该在这里征求关于在这种情况下重构是否值得的意见。
请注意,我已经分析了循环的其他部分,并一直在尝试优化耗时最长的部分。我怀疑这种情况下的虚拟函数调用是我不应该担心的事情,但在我分析之前我无法确定,并且在我更改代码(很多)之前我无法分析。另请注意,某些更新函数非常小,而其他更新函数则较大且更复杂。
EDIT:有多个答案可以提供很好的洞察力,因此任何将来偶然发现这个问题的人都可以查看所有答案,而不仅仅是选定的答案。
虚函数调用只会增加一个间接寻址和一个难以预测的跳转。这意味着通常每个虚拟功能需要进行一次管道刷新或大约 20 个周期。其中 7000 个大约是 140000 个周期,与您的平均更新函数相比应该可以忽略不计。如果不是,则说明大多数更新函数都是空的,您可以考虑将可更新对象放入单独的列表中以实现此目的。
删除虚拟功能只会导致你们中的一个人用一个相同但自行实现的系统替换它。这正是虚函数发挥作用的地方。
根据参考,140000 个周期大约为 50 微秒。这是假设 P4 具有巨大的管道并且始终具有完整的管道刷新(通常不会得到)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)