.NET Core プログラムのスリム化ツール公開、プログラムサイズを1/3に圧縮

.NET Core プログラムのスリム化ツール公開、プログラムサイズを1/3に圧縮

.NET Coreには【未使用コードのトリミング】機能がありますが、静的解析を使用して実現しているため、トリミング効果は最適ではありません。

最終更新 2022/03/10 13:12
杨中科
読了目安 1 分
カテゴリ
.NET
タグ
.NET C# .NET Core トリミング スリム化

.NET Coreには「未使用コードのトリミング」機能がありますが、これは静的解析を用いて実現されているため、そのトリミング効果は最適とは言えません。以下の3つの欠点があります:

  1. Windows FormsやWPFをサポートしておらず、プログラムトリミング機能を最も必要としているのは、むしろデスクトップアプリケーションの開発者です。

  2. 実行時に使用されていないアセンブリを削除できません。例えば、プログラムでAアセンブリを使用し、AアセンブリがB、Cの2つのアセンブリを参照しているとします。Aアセンブリ内ではM1メソッドのみがBアセンブリを使用し、M2メソッドのみがCアセンブリを使用しています。プログラムではAのM1メソッドのみを呼び出し、M2メソッドは一度も呼び出していません。Cアセンブリは呼び出されていないにもかかわらず、「未使用コードのトリミング」機能は静的な参照チェックしか行わないため、Cアセンブリはトリミングされません。

  3. リフレクションを適切にサポートできません。静的解析に依存しているため、実行時にリフレクションで読み込まれるアセンブリがトリミングされる可能性があります。

そこで、私は.NET Coreプログラムを軽量化するアプリケーションを開発しました。これは上記の.NET Coreの「未使用コードのトリミング」問題を解決します。Windows FormsとWPFをサポートしており、実行時にプログラムがロードしたアセンブリを分析することで、どのアセンブリが使用されていないかを把握します。そのため、より多くの未使用アセンブリを削除できるだけでなく、リフレクションも自然にサポートできます。

プログラムトリミング効果の比較:

元のサイズ .NET標準トリミング Zack.DotNetTrimmer
空のCore MVCプロジェクト 97MB 50.3MB 43.6MB
空のWebAPIプロジェクト 93MB 46.3MB 34.5MB
空のWPFプロジェクト 152 MB 非対応 75.2 MB
空のWinFormsプロジェクト 152 MB 非対応 50.0 MB

プロジェクトのオープンソースアドレス:https://github.com/yangzhongke/Zack.DotNetTrimmer/

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む
同じカテゴリ / 同じタグ 2026/02/07

AOTの使用経験のまとめ

プロジェクト作成当初から、新機能を追加したり新しい構文を使用したりした場合には、すぐにAOT公開テストを実施するという良い習慣を身につけるべきです。

続きを読む