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/

Keep Exploring

延伸阅读

更多文章