2

首先,我找不到这个问题,所以我决定在这里发帖。

在开发游戏时,我意识到我在游戏场上拥有的实体越多,fps 下降越多,这是意料之中的。

为了优化它,我在某处读到(如果我能找到它,我会发布链接)如果你重写代码而不是使用通用方法,它会更快,因为它不必每次都“链接”方法运行代码。但是,由于我正在重写代码,它可能会占用更多的虚拟空间。

我只是想知道你对此的看法,如果你认为这是真的。我很乐意接受任何其他优化策略或链接。

编辑: 选择答案后让问题“过于宽泛”有什么意义?如果选择了答案,则意味着有一个有效的答案,这意味着问题不是太宽泛,否则回答者会遇到问题......

谢谢

4

2 回答 2

6

与其试图猜测是什么占用了应用程序的 CPU,不如考虑分析应用程序的性能特征。这可以帮助您了解占用最多 CPU 时间的代码部分。找到代码中 CPU 最密集的部分,进行您认为可以提高该代码性能的调整,然后再次运行性能分析器。一旦您做出更改,分析仪报告的性能特征就会发生显着变化,这并不少见。如果您无法再优化最重的部分,请继续进行下一个最重的部分。

于 2013-07-20T14:36:14.657 回答
1

曾几何时,当你有一个以 100Mhz 运行的单核 CPU 时,查找函数调用并跳转到该内存位置以运行该方法,然后在完成时跳回所涉及的开销加起来- 特别是当你有很多小方法,或者一个方法被调用很多时。

所以他们发明了编译器的内联,它通过将这些小函数直接复制到你的代码中来自动优化你的代码——这样你就可以从编写方法中受益,编译器会修复它,所以它仍然像你用一大方法。

但就在那时,今天,当你有 8 个核心手机以几 Ghz 运行并且流水线和大量优化编译器时,方法调用的成本是微不足道的。您将遇到导致性能问题的其他问题。你会。

今天最常见的原因是内存复制,因为 CPU 运行速度如此之快,它需要稳定的数据流来处理,而当你不得不停下来从其他地方获取一块内存时,这确实很费钱。当您使用 C# 时,下一步是查看您的对象创建 - 就像 Stringbuffer 被发明以使字符串复制执行良好一样,如果您分配很多很多很多对象,您会发现它运行缓慢。

但是,我猜 - 你的问题可能在其他地方,所以看!找出性能问题所在,并修复它们。

于 2013-07-20T22:27:21.553 回答