ユーザ用ツール

サイト用ツール


it技術:dotnet:nativeaot

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
it技術:dotnet:nativeaot [2021/11/05 13:53] – [NativeAOTの準備] yajuadminit技術:dotnet:nativeaot [2021/12/09 02:39] (現在) – [NativeAOTのメモ] yajuadmin
行 30: 行 30:
  
 === C++ によるデスクトップ開発 === === C++ によるデスクトップ開発 ===
-Visual Studioのインストールする環境の選択画面にてワークロードタブに「C++によるデスクトップ開発」にチェックを入れ、「インストール」をクリックします。\\+Visual Studioのインストールする環境の選択画面にてワークロードタブに「C++によるデスクトップ開発」にチェックを入れ、「インストール」をクリックします。\\
 https://sukkiri.jp/technologies/ides/visual-studio-community/vs_com_win_install.html https://sukkiri.jp/technologies/ides/visual-studio-community/vs_com_win_install.html
  
行 40: 行 40:
   * [[https://qiita.com/skitoy4321/items/2c746446e48672b5c735|dotnet-5.0におけるNativeAOTについて]]   * [[https://qiita.com/skitoy4321/items/2c746446e48672b5c735|dotnet-5.0におけるNativeAOTについて]]
   * [[https://qiita.com/skitoy4321/items/4e8960db0c7ddb4fe586|corertのrd.xmlについて]]   * [[https://qiita.com/skitoy4321/items/4e8960db0c7ddb4fe586|corertのrd.xmlについて]]
 +
 +=== イメージがネイティブか判断 ===
 +対象のexeが、.NET(managed)で作られたか判断\\
 +[[https://docs.microsoft.com/ja-jp/cpp/dotnet/how-to-determine-if-an-image-is-native-or-clr?view=msvc-160|イメージがネイティブであるか CLR であるかを確認する]]
 +
 +<code>
 +cd "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin"
 +dumpbin /clrheader xxxx.exe
 +</code>
 +
 +dumpbinでは、mspdb80.dllが必用\\
 +mspdb80.dllは、”C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE"などにある。
 +
 +<code text 結果>
 +File Type: EXECUTABLE IMAGE
 +
 +  Summary
 +
 +       F1000 .data
 +      88B000 .managed
 +       BF000 .pdata
 +      AA9000 .rdata
 +       67000 .reloc
 +        1000 .rsrc
 +       D9000 .text
 +        1000 _RDATA
 +</code>
 +
 +=== イメージサイズ縮小 ===
 +TestIF.exe 21.9 MB(23,029,760 バイト)あるので、サイズを縮小する幾つかのオプションを追加した結果 8.81 MB (9,247,232 バイト)と減らすことが出来た。\\
 +ただし、最適化前の速度が平均 570ms に対して、最適化後の速度が平均 1660ms と約3倍遅くなった。
 +
 +<code xml TestIF.csproj>
 +<PropertyGroup>
 +    <OutputType>Exe</OutputType>
 +    <TargetFramework>net6.0</TargetFramework>
 +    <ImplicitUsings>enable</ImplicitUsings>
 +    <Nullable>disable</Nullable>
 +
 +    <!-- https://github.com/dotnet/corert/blob/master/Documentation/using-corert/optimizing-corert.md -->
 +    <IlcOptimizationPreference>Size</IlcOptimizationPreference>
 +    <RootAllApplicationAssemblies>false</RootAllApplicationAssemblies>
 +    <IlcGenerateCompleteTypeMetadata>false</IlcGenerateCompleteTypeMetadata>
 +    <IlcGenerateStackTraceData>false</IlcGenerateStackTraceData>
 +    <IlcDisableReflection>true</IlcDisableReflection>
 +    <IlcFoldIdenticalMethodBodies>true</IlcFoldIdenticalMethodBodies>
 +    <IlcDisableUnhandledExceptionExperience>false</IlcDisableUnhandledExceptionExperience>
 +</PropertyGroup>
 +</code>
 +
 +**IlcOptimizationPreference Size**\\
 +最適化されたコードを生成するときは、小さいコードサイズを優先します。
 +
 +**IlcOptimizationPreference Speed**\\
 +最適化されたコードを生成するときは、コードの実行速度を優先します。
 +
 +**RootAllApplicationAssemblies デフォルト:true**\\
 +一部のリフレクションコーディングの使用法との互換性のために、コンパイラが未使用のコードを削除しないようにします。このオプションをfalseに設定すると、実行可能ファイルのサイズが小さくなります。
 +
 +**IlcGenerateCompleteTypeMetadata デフォルト:true**\\
 +実行可能ファイルからオブジェクトにアクセスする場合に、メタデータタイプの生成を許可します。このオプションをfalseに設定すると、実行可能ファイルのサイズが小さくなります。
 +
 +**IlcGenerateStackTraceData デフォルト:true**\\
 +スタックトレースでのテキスト名の生成を許可します。このオプションをfalseに設定すると、実行可能ファイルのサイズが小さくなります。
 +
 +**IlcDisableReflection デフォルト:false**\\
 +リフレクションフリーモードは、CoreRTコンパイラとランタイムのモードであり、リフレクションAPIの機能を大幅に削減\\
 +https://github.com/dotnet/corert/blob/master/Documentation/using-corert/reflection-free-mode.md
 +
 +**IlcFoldIdenticalMethodBodies デフォルト:false**\\
 +このオプションは、同一のメソッド本体を折りたたむ(メソッド本体の重複排除)。このオプションをtrueに設定すると、実行可能ファイルのサイズが小さくなります。しかし、予期しない動作が発生する可能性があります。
 +
 +**IlcDisableUnhandledExceptionExperience**\\
 +未処理の例外のスタックトレースをコンソールに出力するコードを無効にします。
 +
 +**IlcInvariantGlobalization デフォルト:false**\\
 +英語以外のカルチャをサポートするコードとデータを削除するグローバリゼーション不変モードを有効にします。コードとデータを削除すると、アプリが小さくなります。\\
 +https://github.com/dotnet/corert/blob/master/Documentation/using-corert/optimizing-corert.md
 +
 +=== Linux-Arm および Linux-Arm64 サポート対象外 ===
 +2021/11/08現在、ラズベリーパイ用にNativeAOTでコンパイルしたが、「error : Cross-OS native compilation is not supported. https://github.com/dotnet/corert/issues/5458」なった。
 +
 +<code>
 +dotnet publish -r linux-arm64 -c release
 +or
 +dotnet publish -r linux-arm -c release
 +</code>
 +
 +==== 参照 ====
 +  * https://www.reddit.com/r/dotnet/comments/od35v9/is_native_aot_on_the_roadmap/
 +  * https://www.reddit.com/r/dotnet/comments/qncfuq/nativeaot_net_7_plans/
 +  * https://medium.com/@MStrehovsky/building-a-self-contained-game-in-c-under-8-kilobytes-74c3cf60ea04
 +
it技術/dotnet/nativeaot.1636088033.txt.gz · 最終更新: 2021/11/05 13:53 by yajuadmin