首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GC语言的优化,有什么想法吗?

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

Stack Overflow用户
提问于 2011-07-06 22:13:03
回答 2查看 443关注 0票数 7

当涉及到优化时,我是一个相当大的新手。在我目前正在开发的这款游戏中,我已经设法优化了一个函数,并将其CPU负载削减了约0.5%,这是我一直以来的“牛逼”。

我的情况如下:我使用一个名为ExEn的XNA包装库在MonoTouch中开发了一个物理密集型游戏,尽管我可能会尝试,但我发现很难让游戏在iPhone4上达到可玩的帧率(此时甚至不想考虑iPhone3GS )。

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

我使用Instruments来分析性能,得到的结果是:http://i.imgur.com/FX25h.png耗尽性能最多的函数要么来自物理引擎(Farseer),要么来自它们调用的ExEn XNA包装器函数(特别是Vector2.Max,Vector2.Min)。

我研究了这些函数,我知道Farseer正在通过引用而不是通过值传递值到这些函数中,所以这就是我所能想到的唯一方法。这些函数本身非常简单,基本上相当于这样的操作

代码语言:javascript
复制
return new Vector2(Max(v1.x, v2.x), Max(v1.y, v2.y)) 

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

所以我的问题是,这是一个失败的原因,还是我可以做些什么来增强性能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-06 23:01:00

首先,喜欢你在Windows Phone 7上的游戏吧!

其次,我在您的分析器输出中没有看到任何异常。我曾经对Farseer引擎进行过一次粗略的性能分析(在.net中运行),并得出了类似的结果。几乎看起来你的减速是成比例的,可能是由于单声道本身。

票数 3
EN

Stack Overflow用户

发布于 2011-07-06 23:26:10

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

  • 最重要的事情似乎是降低碰撞检测计算的复杂性,即不是视觉上的,而是碰撞的形状。在Unijty3D中,它们被称为对撞器,您可以将一个简单的立方体作为对撞器附加到复杂的人体上。我对Fareer一无所知,但他们可能有相似的概念(叫做body?)。

如果可能,请尝试将主要角色或其他复杂对象替换为简单的立方体,并检查fps raises.

  • Compiler开关是否有时会利用性能。确保没有激活调试设置(我在一个C++库项目中使用了30 times slower code )。确保armv7优化已打开,并且-O3或-Os

  • 要注意日志记录语句,因为这些语句在iPhone

上的开销非常大

更新:

  • 尝试减少主动计算的AABB的数量,只是为了找出物理引擎的哪个部分导致了故障。如果是纯数字,那就听从FFox的建议。
  • ,其他平台呢?在开发阶段的模拟器上,您是在哪里执行测试的?哪个?有机会让它在Android或Android模拟器或Windows Phone上运行吗?如果是iPhone特有的问题,这会给你一个提示。
  • 啊,我刚刚看到ExEn还处于预发布状态,最终版将在7月21日作为操作系统发布。如果你的应用在其他类似的平台上运行得很好,那么就等着发布吧,然后再试一试。很有可能在您正在处理的预发布中仍有调试代码。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6597847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档