.NET Core程式瘦身器發布,壓縮程式大小到1/3

.NET Core程式瘦身器發布,壓縮程式大小到1/3

.NET Core具有【裁剪未使用的程式碼】的功能,但由於它是使用靜態分析來實現的,因此它的裁剪效果並非最佳。

最後更新 2022/3/10 下午1:12
杨中科
預計閱讀 2 分鐘
分類
.NET
標籤
.NET C# .NET Core 裁剪 瘦身

.NET Core 具有【裁剪未使用的程式碼】的功能,但由於它是使用靜態分析來實現的,因此它的裁剪效果並非最理想。它存在以下三個缺點:

  1. 不支援 Windows Forms 和 WPF,而實際上對程式裁剪功能需求最強烈的反而是桌面程式的開發者。

  2. 無法刪除執行時期未使用的組件。例如,我們的程式中使用了 A 組件,A 組件又參考了 B、C 兩個組件,A 組件中只有 M1 方法使用了 B 組件,而 A 組件中只有 M2 方法使用了 C 組件。我們的程式中只呼叫了 A 中的 M1 方法,從未呼叫 A 中的 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.5 MB
空 WPF 專案 152 MB 不支援 75.2 MB
空 WinForms 專案 152 MB 不支援 50.0 MB

專案開源網址:https://github.com/yangzhongke/Zack.DotNetTrimmer/

繼續探索

延伸閱讀

更多文章