c# - XNA游戏性能

标签 c# performance xna xna-4.0

我正在使用 C# 2010 和 XNA 4.0 编写游戏。我希望它是一款好游戏,而不是一些“只是另一个废话”,所以我的目标之一是良好的帧率。为此,我想请您提供一些建议,无论是与 XNA 相关还是与 C# 相关 - 我可以做些什么来加速我的代码并提高 FPS。

这是我发现的一些东西:

  • (c#) 使用 array代替 list<>如果您想访问大量数据(甚至很多:拥有 20000 个项目的数组几乎可以提供 20000 个列表的 180% FPS,将会大大提高性能。
  • (c#) 使用 for而不是 foreach将提高性能。在相同的 20000 个元素上,大约有 5-10% 的差异。
  • (xna 和 c#)调用方法会降低性能,所以当我将代码分散到调用其他方法等的方法中时,一切都非常酷且面向对象,每次调用的成本为 1-3 FPS。
  • (xna) update vs. draw: 当我把代码放到 update() 和 draw() 时,性能上没有区别,所以如果你不太在意,你不必把一些方法放在 update() 下而不是将所有内容放在 draw() 中以期获得更好的 FPS。
  • (xna) 不知道是我还是 4.0,但是当你加载一个包含大量纹理和非常复杂的网格的 .X 时,加载会花费很多时间。我不得不编写自己的 .X 加载器和网格/模型渲染器,因为 XNA 开始为每个三角形加载纹理,而不管前一个三角形是否具有相同的纹理。即使编写我自己的缓存纹理的内容加载器也不是解决方案,因为它仍然被使用了很多次。如果你做的东西又好又蓬松,我建议使用 drawuserprimitives而不是 Model类(class)。 (不知道是不是只有4.0,还是3.1也有这样的性能问题)
  • (xna 和c#)在绘图时尽量避免使用“new”。我在网上看到了一些代码,它们被复制/粘贴在一起并具有“basicEffect = new BasicEffect(graphicsDevice);”在 draw() 中如此丑陋,甚至更糟:在 draw() 内部的迭代中。这样会降低性能。而不是在“游戏”或静态类中有一个这样的类。这也适用于其他“临时对象”:丑陋但我认为最好创建一些全局的东西并注意使用它,然后制作一个漂亮而蓬松的代码,这将使我们的游戏成为垃圾收集器。

好吧,长话短说,请在这里发表一些好的建议,这样我/我们就可以做出好的、快速的和优化的游戏;)

提前致谢: 蔡克斯

最佳答案

软件优化是一门手艺。最好的优化类型是基于收集的统计数据的证据。

除非遇到问题,否则不要优化。您不认为游戏的可玩性比这个或其他指标更重要吗?我的建议是先制作游戏,然后再考虑它在哪些方面表现不如您所愿。

然后发布一些具体问题,我相信你会在这里得到一些关于具体问题的帮助。

与此同时,我建议您从游戏开发书籍中获得更多信息,例如此处列出的那些:http://forums.create.msdn.com/forums/p/8642/45646.aspx

XNA Extereme 101 - 似乎是一个有趣的教程

关于c# - XNA游戏性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217769/

相关文章:

c - 有没有更好的方法来确保矩阵之外的元素不被访问?

c# - 有人可以解释为什么 xna Rectangle 结构的行为如此吗?

C# XNA : stopping and playing Cue (sound) objects

C# SslStream 在第二次请求时抛出 IOException

c# - 找不到 HttpServerChannel

c# - 在 JsonSerializerSettings 中将 null 更改为空

c# - 通过 Azure DevOps Services Rest Api 完成的 Pull 请求的列表

jquery - 在 AngularJS 之后加载 jQuery(而不是之前)

performance - MongoDB 中的复合索引是否改进了多重匹配(而不是排序)?

c# - 如何将 MonoGame 安装到 Visual Studio 2013 中?