OK、リンクした暴言にいくつか穴を開けるだけです:
- 「C#は「Just In Time」インタープリターに依存しています -間違っています-JIT コンパイラーです。メソッドが一度 JITtedされた後、コンパイルされたコードは各呼び出しで再利用されます。コンパイルされたコードは、ネイティブのプリコンパイルされたコードと非常に高速です。
- 「キセノンCPUは「インプレース」プロセッサーです」 -「インオーダー」という意味ですか?-そして、「Xenon CPUには分岐予測がありません」。彼は、これらの意味は、JITコンパイルが自然にCPUによって並べ替えられなければならない悪いコードを生成し、大量の分岐を引き起こすことを意味することを意味します-これは絶対にナンセンスです。このCPUアーキテクチャで実行する場合のパフォーマンスに関する同じアドバイスは、C ++とC#の両方に適用されます。
- 「[JIT]は360で常にフラッシュする必要があります」 -間違っています。コンパイルされたコードは、通常のコンパイルされたコードと同様にキャッシュに保存できます。(パイプラインフラッシュを意味する場合は、上記のポイントを参照してください。)
- 「ジェネリック[...]コード生成を使用する」 -ジェネリックは他のすべてと同じようにJIT化され、他のすべてと同様にJITtedコードは高速です。ジェネリックを使用してもパフォーマンスが低下することはありません。
- 「言語のすべてのセクシーな部分は分岐予測を必要とします...」 -これはどのようにC ++にも当てはまらないのでしょうか?- 「...または[...]インプレースコード生成」 -彼はJITtingを意味しますか?高速だと言いましたか?(デスクトップ CLRが実際のコード生成を使用するすべての場所には行きません-Xbox 360ではサポートされていない機能です!)
- 「[C#にはない]大規模なライブラリ(C ++の)」 -XNA自体を除く そしてもっとたくさん。(それでも、これはいくぶん公平なポイントです。)
Xbox 360上のXNAは、.NET Compact Framework CLRの修正バージョンで実行されます。デスクトップ版の標準に達していないことは間違いありません。JITterはおそらくそれほど良いものではありませんが、それも悪いとは思いません。私は彼が言及しなかった驚いてガベージコレクタで恐ろしいデスクトップCLRと比べを。
(もちろん-あなたが専門的に開発されたゲームでガベージコレクタを打つべきではありません、とにかくあなたが配分で注意しなければならないのと同様に、任意のプロ級のゲーム。)
(.NET Compact Frameworkの実際の技術的な説明については、この記事シリーズの概要、JITコンパイラ、GCおよびヒープから始めてください。)
彼が彼の用語について完全に不明確である方法は、彼が何を意味するかを理解することさえ難しくします。彼は最大暴言モードであるか、彼が何について話しているのか分からないかのどちらかです。
邪魔にならないようになったので、ネイティブにするのではなく、360でXNAを使用することで見逃してしまうことがいくつかあります。
- 非常に高速なCPU浮動小数点演算を行うためのSIMD / Vectorユニットへのアクセス
- おそらくC#よりも少し高速になるネイティブ言語コードを使用する機能
- される能力はほとんどあなたがメモリを割り当てる方法とビットlazier
- 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 ++ではいくつかの支援が提供されます。
おそらく、衝突検出やC#での流体シミュレーションなど、CPU演算を集中的に使用しないことが多い大きな理由は、ベクトルユニットへのアクセスの不足です(上記を参照)。