XNA和C#与360的顺序处理器


14

阅读了这句话之后,我觉得他们可能是对的(Xenon和CELL BE 对分支缓存无知的代码都非常敏感),但是我听说人们也在用C#编写出色的游戏。

因此,使用XNA 不可能做任何专业的事情是真的吗?或者发布者只是错过了使XNA成为游戏开发的杀手级API的原因?

从专业上来说,我并不是说可以从中赚钱,而是从更专业的游戏中了解物理模型和动画系统,而这些模型和动画系统似乎超出了语言的范围,从而对内在函数造成了明确的障碍。如果我想为我的游戏编写一个碰撞系统或流体动力学引擎,我不认为C#会为我提供这样做的机会,因为运行时代码生成器和缺少内在函数会影响性能。

但是,许多人似乎可以在这些限制下工作,使自己的游戏成功,但似乎可以避免任何问题。除了库已经提供或由着色器处理的内容以外,我还没有注意到任何XNA游戏都能完成任何复杂的工作。是否由于C#的限制而避免了更复杂的游戏动态,还是只是人们专注于完成游戏

老实说,我不敢相信如果没有某种面向数据的方法或一些肮脏的C#hack来使AI战争能够维持许多单位的AI,以使其比标准方法更好地运行,我想这也是我的问题之一,如何是否有人破解了C#,所以它能够做游戏程序员自然使用C ++进行的工作?


确实是兰特。没有找到关于此人的任何信息,并看到他们是(他是?)一家创业公司,我希望看到任何明显的信息可以支持这一目标……
Jonathan Connell

由于某些原因,我不能完全理解工作室似乎不承认使用XNA。但是,这里有很多示例链接
Tristan Warner-Smith

好吧,显而易见的信息是,CPU本质上对分支代码(C#)很不好。我想知道的是,专业的XNA用户在做什么,这意味着他们没有达到C#施加的软限制?
理查德·法比安

3
我不明白这次的否决票...
FxIII

3
我认为,由于理查德(Richard)的相关文章中出现了许多技术错误,很多人都对理查德(Richard)的问题持否定态度,并且有些人轻视“专业”一词,意味“光环水平的生产”而不是“赚钱”。后者是一个糟糕的选择,但不要因为您不同意链接而拒绝投票-而是通过回答来取消链接。

Answers:


21

好吧,只想戳一下您链接的那个咆哮的漏洞:

  • “ C#依赖于” Just In Time”解释器” -错误-它是JIT 编译器。方法一次被JITted ,已编译的代码将在每次调用时重用。编译后的代码非常接近于本机,预编译的代码。
  • “氙气CPU是“就地”处理器” -他的意思是“按顺序”吗?-并且:“氙气CPU没有分支预测”。他暗示,这意味着JIT编译自然会产生错误的代码,必须由CPU重新排序并导致大量分支-这绝对是胡说八道。在此CPU架构上运行的相同性能建议适用于C ++和C#。
  • “ [JIT]要求在360上持续刷新” -错误,已编译的代码可以像任何正常已编译的代码一样保存在缓存中。(如果他表示要冲洗管道,请参阅以上几点。)
  • “泛型使用代码生成” -泛型像其他所有东西一样被JITted,并且与其他所有东西一样,JITted代码是快速的。使用泛型不影响性能。
  • “语言的所有性感之处都需要分支预测...” -这对C ++也不适用吗?- “ ...或就地代码生成” -他是说准时吗?我是否提到过速度很快?(我不会介绍台式机 CLR使用实际代码生成的所有地方-Xbox 360不支持的功能!)
  • “ [C#没有] [C ++]的大量库” -除了XNA本身以外?还有更多。(不过,这有点公平。)

Xbox 360上的XNA在.NET Compact Framework CLR的修改版上运行。毫无疑问,它不符合桌面版本的标准。JITter可能那么好-但我也不认为这很糟糕。我很惊讶,他没有提到的垃圾收集这是可怕的比桌面CLR。

(当然- 无论如何,您都不应该在专业开发的游戏中遇到垃圾收集器,就像您必须谨慎对待任何专业级游戏中的分配一样。)

(有关.NET Compact Framework的实际技术讨论,也许从本系列文章开始:概述JIT编译器以及GC和堆。)

他对术语完全不明确的方式使得甚至难以理解他的意思。他要么处于最大骚扰模式,要么不知道他在说什么。


既然我们已经解决了这些问题,那么您可以通过在360上使用XNA而不是本地化而错过一些事情

  • 可以访问SIMD / Vector单元,以进行非常非常快的CPU浮点运算
  • 使用母语代码的能力可能会比C#快一点
  • 能力是一个有点有点懒惰随你怎么分配内存
  • XBLIG游戏只能访问6个核心中的4个(但是我们仍然拥有全部3个CPU,它们也不是全核心,因此我们不会错过太多)-不确定这是否适用于非XBLIG XNA游戏
  • 完全DirectX访问权限,可进行真正晦涩的图形欺骗

还值得指出的是,这些只是CPU方面的限制。您仍然可以在GPU上运行完全免费的访问。

我在对这个问题实际上是相同问题的回答中描述了这些事情。正如我在该答案中提到的那样,XNA绝对适合“专业”开发

您唯一需要避免的原因是因为您无法像使用现有C ++知识那样以相同的方式雇用C#人才,许可C#引擎并重用现有C#代码。或者因为您可能还针对不支持C#的平台。

当然,对于我们中许多不是“专业”开发人员的人来说,XNA是我们上Xbox 360的唯一选择,这很有意义。


要回答您的其他问题:

C#并没有阻止您使用面向数据的方法,基本上与在C ++中使用它们的方式完全相同

C#缺乏在编译时自动内联代码的能力,并且(非常容易检查)我很确定紧凑型CLR的JITter不能内联方法(台式机CLR可以)。因此,对于性能至关重要的代码,您可能必须在C#中手动内联,而C ++提供了一些帮助。

为什么您不经常看到CPU运算密集的事情(例如C#中的碰撞检测和流体模拟)的更大原因是无法访问向量单元(如上所述)。


我不记得自己了,但是C#不会阻止您遍历简单数组吗?我还记得一些有关将一流的类型(例如int,float,char)组合在一起的信息,因此,一些面向数据的方法无法尽快运行。那正确吗?我还记得什么?
理查德·法比安

2
如果您将值类型分配给类型,C#会将值类型(不仅是内在值,还可以创建自己的值类型)装箱object。在版本1中(在泛型之前),如果不将它们装箱,就无法将它们放入非数组容器中。但是如今,编写无框代码非常容易。使用CLR Profiler,您可以检测可能要装箱的任何地方。
安德鲁·罗素

甚至可以使用JIT解释器吗?听起来很矛盾。
共产党鸭子

我已经看到了一些线程化的代码技术,我将它们归类为JIT解释。这绝对是一个边缘案例。

1
@Roy T.“ XNA Math Library ”(DirectX的一部分)和“ XNA Framework ”是两个完全不同的东西,但不幸的是发生了命名冲突。您链接的文档不适用于XNA Framework。XNA Framework数学类型不使用SIMD / Vector单元
Andrew Russell

5

您必须定义“专业”。您能做《愤怒的小鸟》,《植物大战僵尸》等吗?绝对。您能做《孤岛危机2》,《化学需氧量》,《光晕》吗?我对此表示怀疑。使用C#只会真正影响占用大量CPU的游戏,并且还需要压缩内存的最后一个字节(您会浪费掉垃圾回收),因此您仍然可以做很多事情。

作为入门人员的学习工具,原型工具,用于编写可以权衡利弊的游戏的平台等,它非常棒,并且功能强大且简单易用,并非旨在满足您的需求称为“ AAA”游戏。它还消除了许多痛苦,使人们不得不担心跨平台移植和兼容性。

如果您想出了一款出色的游戏,并且遇到了XNA的局限性,那么我建议您直接与MS联系,如果您的想法真的足够好,他们可能会让您开始全面的开发套件。


不过,您可以制作N脚的Duke Nukem续集吗?;)
Jonathan Connell

1
大多数基准测试发现,C#代码的运行速度比同等C代码(在PC上)慢30%至70%。当您考虑到大多数游戏不是CPU限制的,并且C#代码的关键部分可以使用不安全的代码编写时,这些代码的运行速度几乎可以与等效的C代码一样快或更快(因为JIT拥有更多可用于它比编译器更好,因此可以做出更好的优化选择),您会发现C#非常适合AAA游戏。
BlueRaja-Danny Pflughoeft

@BlueRaja:不安全的代码是不是在Xbox 360最XNA开发一个选项

1
@BlueRaja:值得指出的是,unsafe代码通常比安全等效代码,因为它减少了CLR可以进行的优化次数。您必须测量它。
Andrew Russell

2
@Blueraja“当您考虑到大多数游戏不受CPU限制时”需要引用多少?我尚未开发出并非在所有方面都受限制的专业开发的游戏。如果不是,我们会找到某种方法将负载转移到机器的该部分上!
理查德·法比安

3

一个简单的事实是,您不需要很高的多边形数量,完整的HDR照明或世界上最有趣的物理原理来制作有趣的游戏,并且,如果您的游戏计划不包括其中的任何一项,那么为什么不打算更快地进行开发呢?开发时间解决方案?

更专业的游戏具有物理模型和动画系统

那是错误的。专业游戏具有实现游戏玩法和实现艺术外观所需的一切,仅此而已,事实上,也不少。游戏并不是更专业,因为它看起来更逼真或具有更详细的物理原理。专业的游戏可以按时,按预算等实现其游戏性和视觉目标,并且可以发货并获利。


1
高多边形数和HDR会落在图形卡上,不是吗?因此,您应该期望在C#和C ++中具有完全相同的性能。
BlueRaja-Danny Pflughoeft

@BlueRaja:有一个为那些CPU成本太高,而且内存-尤其是在360
DeadMG

与本地代码相比,图形lib调用或多或少有更多开销。另一方面,现代图形库非常努力地减少每帧调用驱动程序的次数,因为它是主要瓶颈之一。
drxzcl 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.