.NETアプリをネイティブにコンパイルできますか?
-
06-07-2019 - |
質問
.NETアプリを事前にネイティブマシンコードにコンパイルできるかどうか疑問に思っていますか?できたとしても、そうするつもりはありません。興味があります。
ありがとう
解決
NGenを使用して事前にコンパイルできますが、これはまだ.NETフレームワークに依存しています。 RemotesoftのSalamander(商用アプリ)は、フレームワークのないアプリを作成できます。
他のヒント
ILをネイティブバイナリにコンパイルできます。それを行う製品があります。
大きな質問はあなたがすべきです...
すべてのドットネットの依存関係を削除してドットネットなしで実行する場合
基本的にこれらの製品が行っていることは、マシンレベル(通常x86)までプリコンパイルし、exeに必要なすべてのライブラリを静的に含めることです。それは通常、巨大なexeファイルになります。さらに重要なことは、ターゲットマシンにランタイムが実際にはないことです。ネイティブコンパイラが組み込むことを選択したランタイムの一部があります。
より速いJIT時間を取得したい場合
NGenを使用してネイティブバイナリにコンパイルすることもできますが、ドットネットにはすべての依存関係があります。ターゲットマシンにはフレームワークなどがまだ必要です。
ただし、ngenを実行すると、アプリが最大64ビットまで自動プロモートする機能が失われます。アプリがプリコンパイルされている場合は、1つのモードを強制する必要があります。ユーザーが64ビットマシンで実行している場合、ILコードは昇格されます(フラグを立てない限り)。
ほとんどのアプリでは、JIT時間は最大のボトルネックではありません。これは、フレームワークライブラリとその他の関連要件の読み込みです。
本当に必要な場合は、セットアップアプリ内でngenを実行して、現在のユーザーのターゲットマシンを取得できます。
また、最近アプリをNGENできず、JITの場合と同様にCPUを利用できると期待していることも知りました。 NGENを実行すると、何らかの理由で常にPentiumProの出力が最適化され、SSE、SSE2などの利点を活用できません。したがって、合理的な使用例としてNGENを削除します。
ngen を使用して、 pre-JIT 'であるため、ネイティブ形式でディスク上で利用できるため、アプリケーションの起動時間を短縮できます。
Monoには、ネイティブコードを生成できるAhead of Time(AOT)コンパイラがあります。