我正在使用C#2010和XNA 4.0编写游戏.我希望它是一个好游戏,而不是一些"只是另一个废话",所以我的目标之一是良好的帧率.为此,我想问你一些建议,无论是XNA相关还是C#相关 - 我能做些什么来加速我的代码,从而提高FPS.
这是我发现的一些东西:
- (c#)使用
arrayinsted list<>会大大提高性能,以防你想要访问大量数据(甚至很多:拥有20000个项目的数组给出了近200%的FPS列表的180%.
- (c#)使用
for而不是foreach 将提高性能.在相同的20000元素上,它就像5-10%的差异.
- (xna和c#)调用方法会降低性能,因此当我将代码分散到调用其他方法等的方法中时,一切都非常酷且面向对象,每次调用的成本为1-3 FPS.
- (xna)更新与绘制:当我将代码放入update()和draw()时,性能没有差别,所以如果你不在乎,你不必在update()下放一些方法而不是保持一切都在draw()希望更好的FPS.
- (xna)不知道它是我还是4.0,但当你加载一个带有大量纹理的.X和相当复杂的网格时,需要很多时间来加载.我不得不编写自己的.X加载器和网格/模型渲染器,因为XNA开始为每个三角形加载纹理,无论前一个三角形是否具有相同的纹理.即使编写我自己的缓存纹理的内容加载器也不是解决方案,因为它仍然被使用了很多次.如果你做了一些漂亮而蓬松的东西我建议使用
drawuserprimitives而不是Model上课.(不知道是否只有4.0,或者3.1也有这样的性能问题)
- (xna和c#)尽量避免在绘图时使用"new".我在网上看到了一些代码,什么是复制/粘贴在一起并且有"basicEffect = new BasicEffect(graphicsDevice);" draw()中的这种丑陋,更糟糕的是:在draw()中的迭代中.这会扼杀性能.而不是在"游戏"或静态类中有一个这样的类.这也适用于其他"临时对象":丑陋,但我认为最好创建一些全局的东西并注意使用它然后制作一个漂亮而蓬松的代码,因为垃圾收集器会使我们的游戏.
好吧,所以长话短说,请在这里发表一些好的建议,这样我/我们就可以做出好的,快速的,优化的游戏;)
提前致谢:Zéiksz