好吧,只想戳一下您链接的那个咆哮的漏洞:
- “ 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#中的碰撞检测和流体模拟)的更大原因是无法访问向量单元(如上所述)。