GC语言的优化,有什么想法吗?

本文关键字:什么 语言 优化 GC | 更新日期: 2023-09-27 18:01:26

在优化方面我是一个相当大的新手。在我目前正在开发的游戏中,我已经设法优化了一个功能,并削减了大约0.5%的CPU负载,这就像我所做的那样"棒极了"。

我的情况是这样的:我在MonoTouch上开发了一款重物理的游戏,使用XNA包装库ExEn,并尝试着让游戏在iPhone4上达到可玩的帧率(此时甚至不想考虑iPhone3GS)。

性能下降几乎肯定是在物理计算中,如果我关闭物理,帧率急剧上升,如果我禁用所有东西,渲染,输入,音频,只是让物理在物理密集的情况下性能徘徊在15fps左右。

我使用Instruments来分析性能,这就是我得到的:https://i.stack.imgur.com/Zmj8k.png消耗最多性能的功能要么来自物理引擎(Farseer),要么来自他们调用的ExEn XNA包装函数(特别是Vector2)。马克斯,Vector2.Min)。

我查看了这些函数,我知道无论它在哪里,Farseer都是通过引用传递值到这些函数中,而不是通过值,所以这就是覆盖(这实际上是我能想到的唯一方法)。这些函数本身非常简单,基本上相当于

这样的操作
return new Vector2(Max(v1.x, v2.x), Max(v1.y, v2.y)) 

基本上我觉得我被困住了,在我有限的能力和对代码优化的理解中,我不确定我的选择是什么,或者我甚至不确定我是否有任何选择(也许我应该蜷缩成胎儿的姿势哭?)随着LLVM的开启和内置发布,我最多可以获得15fps。我确实设法通过降低物理精度将游戏提高到30帧/秒,但这使得许多关卡根本无法玩,因为身体彼此相交并自行崩溃。

所以我的问题是,这是注定要失败的,还是我可以做些什么来提高性能?

GC语言的优化,有什么想法吗?

首先,要热爱你在Windows Phone 7上的游戏!

其次,我在你的分析器输出中没有看到任何不寻常的东西。我曾经对Farseer引擎做过一次快速而粗略的性能分析(在。net中运行),得出了类似的结果。它几乎看起来像你有一个整体成比例的减速,可能是由于mono本身。

我想你已经遵循了http://farseerphysics.codeplex.com/documentation中的性能提示:-)

  • 最重要的事情似乎是以减少复杂性碰撞检测计算;即不是视觉效果,而是碰撞效果形状。在Unijty3D中,它们被称为碰撞器和你可以附加一个简单的立方体作为一个复杂的人类的碰撞器的身体。我什么都不知道但他们可能有相似之处概念(是否称为主体?)。

    如果可能的话,尝试更换主电源字符或其他复杂的对象

  • 编译器开关有时会影响性能。一定要确保没有激活调试设置(我在一个c++库项目中遇到了速度慢30倍的代码)。确保armv7优化已打开,-O3或-Os

  • 注意日志语句,因为它们在iPhone上非常昂贵

(更新:)

  • 尝试减少主动计算的aabb的数量,只是为了找出物理引擎的哪个部分导致了麻烦。如果是纯数字,请遵循fffox的建议。

  • 其他平台怎么样?在开发阶段,你在哪里执行测试,在模拟器上吗?哪一个?有机会让它在Android或Android模拟器或Windows Phone上运行吗?如果这是iPhone特有的问题,这将给你一个提示。

  • 啊,我刚刚看到ExEn还在预发布状态,最终版本将在7月21日作为OS发布。在我看来,这就改变了情况:如果你的应用在其他可比较的平台上运行良好,那就等着它发布,然后再试一次。

  • 预发布版中很有可能还存在调试代码。