8

事前に .NET アプリをネイティブ マシン コードにコンパイルできるかどうか疑問に思っていますか? できたとしても、そうするつもりはありません。私はただ興味があります。

ありがとう

4

4 に答える 4

11

NGen を使用して事前にコンパイルできますが、これはまだ .NET フレームワークに依存しています。Remotesoft の Salamander (商用アプリ) は、フレームワークのないアプリを作成できます。

于 2008-10-10T00:57:19.393 に答える
5

IL をネイティブ バイナリにコンパイルできます。それを実現する製品があります。

より大きな問題は、あなたが...

dot net なしで実行するためにすべての dot net 依存関係を削除する場合

基本的に、これらの製品が行っていることは、マシン レベル (通常は x86) までプリコンパイルしてから、必要なすべてのライブラリを exe に静的に含めることです。それは通常、巨大なexeになります。さらに重要なことに、ターゲット マシンにランタイムが実際にはありません。ネイティブ コンパイラが組み込むことを選択したランタイムの一部があります。

より速い JIT 時間を取得したい場合

NGen を使用してネイティブ バイナリにコンパイルすることもできますが、ドット ネットへの依存関係はすべて残ります。ターゲット マシンには、フレームワークなどが必要です。

ただし、ngen にすると、アプリが最大 64 ビットに自動昇格する機能が失われます。アプリがプリコンパイルされている場合は、1 つのモードを強制する必要があります。ユーザーが 64 ビット マシンで実行している場合、IL コードは昇格します (そうしないようにフラグを立てない限り)。

ほとんどのアプリでは、JIT 時間は最大のボトルネックではありません。これは、フレームワーク ライブラリおよびその他の関連する要件の読み込みです。

本当に必要な場合は、セットアップ アプリ内で ngen して、現在のユーザーのターゲット マシンを取得できます。

また、最近、アプリを NGEN することはできず、JIT のように CPU を利用することを期待できないことも知りました。NGEN を実行すると、何らかの理由で常に PentiumPro の出力が最適化され、SSE、SSE2 などは利用されません。したがって、妥当な使用例として NGEN を削除すると言えます。

于 2008-10-10T01:12:48.910 に答える
1

ngenを使用してイメージを「pre-JIT」することができるため、アプリケーションの起動時間を短縮するためにネイティブ形式でディスク上で利用できます。

于 2008-10-10T00:57:46.257 に答える
1

Mono には、ネイティブ コードを発行できるAhead of Time (AOT)コンパイラがあります。

于 2010-01-19T07:33:01.460 に答える