7

C# のような最新のクロスプラットフォーム プログラミング言語で、API 呼び出しなどを使用して高速なネイティブ アプリケーションを作成するのは素晴らしいことですよね。たとえば、IT 担当者が他のコンポーネントを必要としないもののインストールを支援するための単純なユーティリティを、簡単で最新のプログラミング言語で作成したい場合はどうでしょうか? または、3D ゲームを作成する場合は、高速である必要があり、JIT では速度が低下するだけです...

なぜ、なぜそれができないのですか?なぜこれらのネイティブの最新プログラミング言語がないのでしょうか?

4

7 に答える 7

15

C# と .Netネイティブ コードです。あなたはJITterを誤解していると思います。VM ではありません。AC# プログラムは、実行前に完全にネイティブ コードにコンパイルされます。

ここで、「他のコンポーネントが必要」の部分が懸念されます。ただし、時間をかけてください。最近では、少なくとも .Net 2.0 がなければ、Windows のインストールを見つけるのに苦労するでしょう。また、いくつかの主流の Linux ディストリビューションでさえ、すぐに使用できる mono が含まれています。

于 2009-10-24T02:48:49.670 に答える
8

JITが物事を遅くすると思い込まないでください。JITは、386やPentiumのような一般的なコンピューターではなく、アプリケーションを実行している正確なコンピューターに最適化できます。何が利用可能かを正確に把握しているため、コードを生成する際の速度とメモリのトレードオフの決定を改善することもできます。それでもJITによって処理が遅くなる場合は、それらをNGENして、JITtingがすべて事前に行われるようにすることができます。

この証拠として、QuakeがCLRに数回移植されていることを考慮してください。私の個人的なテストでは、QuakeがCLRで実行されると、デモの約半分の時間で1秒あたりのフレーム数が速くなりました。

于 2009-10-24T02:58:48.963 に答える
3

コンパイルされた.NETプログラムは、Cと同じくらい高速に実行されることが示されています。超スリムにしたい場合は、ネイティブプロセッサ用のアセンブリで記述してください。

于 2009-10-24T02:51:19.793 に答える
2

Microsoft NGEN.EXEツールを使用して、.NETアセンブリのネイティブイメージを作成できます。MSDNNGENのドキュメントを参照してください。マイクロソフトは、あなたがここで何を得ているかについてはすでに考えています。

Microsoftは、複数のアセンブリファイルを1つにマージするILMERGE.EXEツールも作成しています。これは、最適化と速度にも影響する可能性があります。

于 2009-10-24T02:56:47.457 に答える
0

ちなみに、Monoは事前コンパイルが完全に行われているため、ランタイムが不要になります。(それが彼らがiPhoneで走り去る方法だと思います。それはJITを禁止します。)

于 2009-10-26T09:52:26.477 に答える
0

では、これは、(限定的な) .NET 呼び出しを使用して C# プログラムを完全にコンパイルし、スタンドアロン EXE にリンクして、.NET をまったくインストールしなくても実行できることを意味するのでしょうか?

参考までに: 約 5000 台のサーバーのサーバー資産を調べたところ、.NET 2.0 を含まないサーバーが約 200 台あることがわかりました。

これにより、「すべての Windows インスタンス」で実行する必要があるコードで問題が発生します。2.0 を含まない .NET 4.0+ では、新しい Windows マシンと古い Windows マシンの両方が「適切な」.NET を持っていない可能性があるため、これはさらに悪化します。

于 2013-04-25T16:15:04.597 に答える
-3

あります、C. C はあらゆるアプリケーションの作成に使用できます。

于 2009-10-24T02:44:42.297 に答える