.NET ネイティブによるアプリのコンパイル

.NET Native は、UWP アプリをビルドして展開するためのプリコンパイル テクノロジです。 .NET Native は Visual Studio 2015 以降のバージョンに含まれています。 マネージド コード (C# または Visual Basic) で記述されたリリース バージョンの UWP アプリが自動的にネイティブ コードにコンパイルされます。

通常、.NET アプリは、中間言語 (IL) にコンパイルされます。 実行時に、Just-In-Time (JIT) コンパイラによって IL がネイティブ コードに変換されます。 これに対し、.NET Native では、UWP アプリがネイティブ コードに直接コンパイルされます。 開発者にとって、これは次のことを意味します。

  • アプリの特徴は、ネイティブ コードのパフォーマンスです。 通常は、最初に IL にコンパイルされてから JIT コンパイラによってネイティブ コードにコンパイルされるコードよりもパフォーマンスに優れています。

  • 引き続き C# または Visual Basic でプログラムを作成できます。

  • そのクラス ライブラリ、自動メモリ管理とガベージ コレクション、例外処理など、.NET Framework によって提供されるリソースを引き続き利用できます。

アプリのユーザーにとっては、.NET Native には次のような利点があります。

  • 大部分のアプリとシナリオで実行時間が短縮されます。

  • 大部分のアプリとシナリオで起動時間が短縮されます。

  • 配置コストと更新コストが削減されます。

  • アプリのメモリ使用量が最適化されます。

ただし、.NET Native では、ネイティブ コードへのコンパイル以上の操作が行われます。 .NET Framework アプリのビルド方法と実行方法が変更されます。 特に次の点に違いがあります。

  • プリコンパイル時に、.NET Framework の必要な部分がアプリに静的にリンクされます。 これにより、アプリを .NET Framework のアプリローカルのライブラリを使用して実行でき、コンパイラではグローバル分析を実行してパフォーマンスを向上させることができます。 その結果、.NET Framework の更新後であっても、アプリは常に高速に起動します。

  • .NET Native ランタイムは静的プリコンパイル用に最適化されており、ほとんどのケースでは優れたパフォーマンスを発揮します。 同時に、開発者に役立つ主要なリフレクション機能もあります。

  • .NET Native は、静的プリコンパイル シナリオ用に最適化されている、C++ コンパイラと同じバックエンドを使用します。

.NET Native は、この表に示すように、内部で C++ と同じか類似のツールを使用しているため、マネージド コードの開発者に C++ のパフォーマンス上の利点を提供できます。

コンポーネント .NET Native C++
ライブラリ .NET Framework + Windows ランタイム Win32 + Windows ランタイム
コンパイラ UTC 最適化コンパイラ UTC 最適化コンパイラ
配置 実行可能バイナリ 実行可能バイナリ (ASM)
ランタイム MRT.dll (最小 CLR ランタイム) CRT.dll (C ランタイム)

UWP アプリ の場合は、.NET Native コード コンパイル バイナリをアプリ パッケージ (.msix または .appx ファイル) に入れて Microsoft Store にアップロードします。