在优化方面,我是一个相当大的新手。在我正在开发的当前游戏中,我已经设法优化了一个函数并削减了大约 0.5% 的 CPU 负载,这与我一直以来的表现一样“棒极了”。
我的情况如下:我使用名为 ExEn 的 XNA 包装器库在 MonoTouch 中开发了一款物理重度游戏,并尽可能尝试我发现很难让游戏在 iPhone4 上达到可玩的帧率(此时甚至不想考虑 iPhone3GS)。
性能下降几乎肯定是在物理计算中,如果我关闭物理,帧率会急剧上升,如果我禁用所有东西,渲染、输入、音频,只让物理在物理密集情况下性能徘徊在 15fps 左右。
我使用 Instruments 来分析性能,这就是我得到的:http://i.imgur.com/FX25h.png消耗最多性能的函数要么来自物理引擎 (Farseer),要么来自它们调用的 ExEn XNA 包装函数(特别是 Vector2.Max、Vector2.Min)。
我研究了这些函数,我知道 Farseer 在任何地方都可以通过引用而不是通过值将值传递给这些函数,所以这就是涵盖的内容(这实际上是我能想到的唯一方法。基本上,函数本身非常简单相当于这样的操作
return new Vector2(Max(v1.x, v2.x), Max(v1.y, v2.y))
基本上,我觉得自己被困住了,而且在我有限的能力和对代码优化的理解中,我不确定我的选择是什么,或者我是否有任何选择(也许我应该蜷缩成胎儿的姿势哭泣? ).启用 LLVM 并内置版本后,我最多只能获得 15fps。我确实设法通过降低物理精度将游戏提高到 30fps,但这使得许多关卡根本无法玩,因为 body 彼此相交并自行坍塌。
所以我的问题是,这是一个失败的原因还是我可以做些什么来提高性能?
最佳答案
首先,喜欢您在 Windows Phone 7 上的游戏!
其次,我在您的探查器输出中没有发现任何异常。我曾经对 Farseer 引擎(在 .net 中运行)进行了一次快速而粗略的性能分析,并得出了类似的结果。看起来您的减速几乎是成比例的,并且可能是由于单声道本身。
关于c# - GC 语言的优化,有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597847/