我正在使用C#2010和XNA 4.0编写游戏。我希望它是一个好游戏,而不是一些“只是另一个废话”,所以我的目标之一是良好的帧率。为此,我想问你一些建议,无论是XNA相关还是C#相关 - 我可以做些什么来加速我的代码,从而提高FPS。
以下是我发现的一些内容:
array
list<>
的内容会大大提高性能,以防您想要访问大量数据(甚至很多:拥有20000个项目的数组几乎占180%)列表的FPS为20000。for
代替foreach
可以提高效果。在相同的20000元素上,它就像5-10%的差异。drawuserprimitives
而不是Model
类。 (不知道它是否只有4.0,或3.1也有这样的性能问题)好的,所以长话短说,请在这里发表一些好的建议,这样我/我们就可以制作好的,快速的,优化的游戏;)
提前致谢: Zéiksz
答案 0 :(得分:7)
软件优化是一种工艺。最好的优化类型是基于收集的统计数据的证据。
在您遇到问题之前不要优化。您是否认为游戏可玩性比此指标或其他指标更重要?我的建议是首先制作游戏,然后根据自己的喜好考虑它的表现。
然后发布一些具体问题,我相信你会在具体问题上得到一些帮助。
与此同时,我建议您从游戏开发书籍中获取更多信息,例如此处列出的信息:http://forums.create.msdn.com/forums/p/8642/45646.aspx。
XNA Extereme 101 - 似乎是一个有趣的教程
答案 1 :(得分:7)
我的2美分价值:
不要将所有代码放在一个方法中,因为您认为调用方法是成本。如果你通过调用一个空方法来考虑丢失1-3 FPS,你可能还没有完成对1-3损失的研究。如果在空方法调用期间失败是真的,那么你必须拥有数千万的FrameRate ....你不会在1-3左右的时候关注自己。
FPS是判断XNA性能的不好方法。如果启用了可变时间步,则涉及操作系统的其他进程可能会影响帧速率。你真的需要改为。只需通过使用System.Diagnostic.Stopwatch对象对它们进行计时,即可专注于完成Update&amp; /或Draw Methods所需的实际时间。他们单独计时,而不是在一起(非常重要)。
“新”关键字不仅应该在绘制调用中避免,还应该在更新和放大中的任何位置。 draw ...仅供参考类型使用。随时随地使用新关键字和值类型。
答案 2 :(得分:5)
UberGeekGames有一篇关于XNA优化的好文章。它主要针对Xbox和WP7,但许多东西也适用于PC。
原始网站已失效,但可在互联网档案中找到:
Archived version of High end performance optimizations on the xbox 360 and windows phone7
经验法则是“优化前的配置文件”。