質問

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

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

役に立ちましたか?

解決

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

今、「他のコンポーネントが必要」は一部が心配です。ただし、時間を与えてください。最近では、少なくとも.Net 2.0なしでWindowsのインストールを見つけることは難しくなります。また、いくつかの主流のLinuxディストリビューションでさえ、すぐに使えるモノが含まれています。

他のヒント

JIT によって処理が遅くなるとは考えないでください。JIT は、386 や Pentium などの汎用コンピューターではなく、アプリケーションを実行しているコンピューターそのものに対して最適化できます。利用可能なものを正確に把握しているため、コード生成時に速度とメモリのトレードオフをより適切に決定することもできます。また、JIT を使用しても動作が遅くなる場合は、NGEN を実行して、JIT 処理がすべて事前に完了するようにすることができます。

その証拠として、次のように考えてください。 Quake は CLR に移植されました 数回、私の個人的なテストでは、1 秒あたりのフレーム数は もっと早く Quake をデモする回数の約半分は CLR 上で実行されます。

コンパイルされた.NETプログラムは、Cと同じくらい迅速に実行されることが示されています。必要に応じて、ネイティブプロセッサのアセンブリで非常にリーンに記述してください。

Microsoft NGEN.EXEツールを使用して、.NETアセンブリのネイティブイメージを作成できます。 MSDN NGENドキュメントを参照してください。 Microsoftは、ここで何を取得しているのかについては既に説明しています。

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

補足として、Monoにはコンパイル前にフル機能があり、ランタイムは不要です。 (私はそれが彼らがiPhoneで走り去る方法だと思う、それはどんなJITも禁止する。)

つまり、これは、.NETをまったくインストールせずに実行されるスタンドアロンEXEへの(制限付きの).NET呼び出しを使用して、C#プログラムを完全にコンパイルおよびリンクできるということですか?

FYI:約5000台のサーバーのサーバーエステートを確認すると、.NET 2.0がなくても約200台が明らかになりました。

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

Cがあります。Cを使用して、あらゆるアプリケーションを記述できます!!!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top