.NET Core剪裁器Zack.DotNetTrimmer升级瘦身引擎,并支持剪裁计划的录制和回放
上周,我发布了对.NET Core程序进行瘦身的开源软件Zack.DotNetTrimmer,与.NET Core内置的剪裁器相比,Zack.DotNetTrimmer不仅对程序的剪裁效果更好,而且还支持WPF、WinForm程序。下面是Zack.DotNetTrimmer与.NET内置的剪裁器的对比图:

项目地址:https://github.com/yangzhongke/Zack.DotNetTrimmer
一周时间内,相关文章在各平台获得了超过四万阅读量,项目收获了将近170+个star,朋友们反馈了很多的功能建议,因此本周我对它进行了升级。本文将会对这些升级的新功能做介绍。
新功能一、支持剪裁计划的录制和回放
默认情况下,Zack.DotNetTrimmer会在被裁剪的程序退出后立即进行程序的裁剪。但是,在比较复杂的项目中,我们可能需要多次以不同的环境、配置、登录用户等来运行被裁剪的程序,以便于全面覆盖代码的运行路径,最后再统一进行裁剪。
因此,本程序增加支持【录制】、【应用】两种运行模式。在【录制】模式下,它会把程序的剪裁计划记录到一个记录文件中,如果这个记录文件已经存在,则它会把程序的剪裁计划追加到记录文件中。在我们多次以【录制】模式运行待裁剪的程序后,我们再用【应用】模型运行本程序,并且指定之前记录的文件,它就会根据记录文件中的信息对程序进行裁剪。
比如,我们先以【录制模式】启动待裁剪的程序,指定把剪裁计划记录到d:/1.json文件中,然后我们以用户A的身份对程序进行测试;然后我们再以【录制模式】启动待裁剪的程序,同样指定把剪裁计划记录到d:/1.json文件中,并以用户B的身份对程序进行测试,从而覆盖在以用户A的身份运行的时候没有覆盖到的代码。最后,我们再以【应用模式】启动待裁剪的程序,指定剪裁计划文件为d:/1.json,这样Zack.DotNetTrimmer就会把两次【录制模式】的代码加载结果合并然后进行程序的裁剪。
这个功能可以用于自动化测试,只要确保多个自动化测试程序的剪裁计划使用同一个记录文件即可。
这个功能也适用于自动构建,我们可以把提前完成的剪裁计划文件重复使用,从而实现在程序发布完成后以【应用模式】运行Zack.DotNetTrimmer,从而实现自动化地进行程序的裁剪。
新功能二、支持删除未使用的类
默认情况下,Zack.DotNetTrimmer会把没有被加载的程序集删除。我们知道,对于被加载的程序集,其中仍然有可能存在没有被使用的类,如果对这些类进行裁剪,那么我们就可以进一步压缩.NET Core程序的大小。
新版的Zack.DotNetTrimmer支持“贪婪剪裁”的选项,启用这个选项后,它会尝试把程序集中未使用的类也删除。以TeeChart这个控件的winform版演示程序为例,使用默认选项裁剪后,程序的大小从161.78 MB压缩为79.90 MB,而使用“贪婪剪裁”选项后,程序进一步压缩为78.38 MB,也就是又删除了1.52 MB无用的代码。
受制于技术实现的限制,目前它暂时无法清理含有本地代码(比如NGen等)的程序集中的类,而且它只是把类的方法体清除,并不会完全删除类。我会继续研究改进这个项目,欢迎各位反馈建议。
项目地址:https://github.com/yangzhongke/Zack.DotNetTrimmer
我将会写一篇文章讲解这个软件的实现原理,欢迎关注。
.NET Core剪裁器Zack.DotNetTrimmer升级瘦身引擎,并支持剪裁计划的录制和回放的更多相关文章
- Excel催化剂开源第6波-Clickonce部署之自动升级瘦身之术
Clickonce无痛自动更新是我最喜欢使用VSTO开发并Clickonce部署的特性之一,但这个自动更新,通常会更新整个程序文件,包含所有的引用dll和一些资源文件等. 一般来说,我们更新的都是主程 ...
- 一个更好用的.NET Core程序瘦身器,减小程序尺寸到1/3
一.为什么要开发.NET Core程序瘦身器? .NET Core具有[剪裁未使用的代码]的功能,但是由于它是使用静态分析来实现的,因此它的剪裁效果并不是最优的.它有如下两个缺点: 不支持Window ...
- 使用.NET Core创建Windows服务 - 使用.NET Core工作器方式
原文:Creating Windows Services In .NET Core – Part 3 – The ".NET Core Worker" Way 作者:Dotnet ...
- .NET跨平台实践:Linux .Net Core自宿主应用程序瘦身记
一,.NET Core 自宿主应用程序个头很大 发布.NET Core应用程序有两个方式,一种是“便携式”,一种是“自宿主式”.便携式发布时,目标程序不带.net core运行环境,所以“个头”很小, ...
- dotnet core瘦身发布
需要安装nuget包Microsoft.Packaging.Tools.Trimming然后利用如下命令发布dotnet publish -r win10-x64 -c release --self- ...
- .net core 拦截器的使用
.net core 拦截器的使用 实例代码:https://gitee.com/D_C_L/InterceptorTest.git 拦截器主要是将程序中的一些可以独立出去的模块进行拦截,比如幕等性,和 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来
上一篇文章(https://www.cnblogs.com/meowv/p/12896177.html)已经成功创建了博客项目,但是abp默认给我们引用了许多项目中用不到的组件. 本篇文章将给项目进行 ...
- iOS安装包瘦身的那些事儿
在我们提交安装包到App Store的时候,如果安装包过大,有可能会收到类似如下内容的一封邮件: 收到这封邮件的时候,意味着安装包在App Store上下载的时候,有的设备下载的安装包大小会超过100 ...
- Android App安装包瘦身计划
Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...
随机推荐
- 有手就行4——jenkins项目构建类型(自由风格,maven风格)
有手就行4--构建Maven项目 Jenkins项目构建类型(1)-Jenkins构建的项目类型介绍 Jenkins项目构建类型(2)-自由风格项目构建 Jenkins项目构建类型(3)-Maven项 ...
- 年前最后一次2022.1.28_RP++
T1同昨(我看到题目就粘上昨天的代码,结果题还没发我就A了hhhhhh) T2一开始想用深搜,结果T掉了...只好改广搜,就挺令人头大 点击查看宽广对比 #include<bits/stdc++ ...
- NeurIPS 2017 | QSGD: Communication-Efficient SGD via Gradient Quantization and Encoding
由于良好的可扩展性,随机梯度下降(SGD)的并行实现是最近研究的热点.实现并行化SGD的关键障碍就是节点间梯度更新时的高带宽开销.因此,研究者们提出了一些启发式的梯度压缩方法,使得节点间只传输压缩后的 ...
- Hyperledger Fabric 2.x 动态更新智能合约
一.说明 在上一篇文章中分享了智能合约的安装与使用,如果业务有变更代码需要修改怎么办呢?本文分享如何对已安装的合约进行版本更新. 二.环境准备 区块链网络安装:<Hyperledger Fabr ...
- Spring Security即将弃用WebSecurityConfigurerAdapter配置类
用过WebSecurityConfigurerAdapter的都知道对Spring Security十分重要,总管Spring Security的配置体系.但是马上这个类要废了,你没有看错,这个类将在 ...
- python-logging日志模块,以及封装实现
前言 是Python内置的标准模块,主要用于输出运行日志 基本语法 import logging # # logging模块默认设置的日志级别是warning,而debug和info的级别是低于war ...
- BugKu-Misc-简单取证1
下载文件压缩包,解压得到文件夹config,根据题目得知为取证,使用工具mimikatz, github地址:https://github.com/ParrotSec/mimikatz 将文件夹con ...
- Dashboard究竟是什么,它在数据展示上的优势何在?
相信很多人在做数据分析工作的时候都遇到这种情况,辛辛苦苦做出来的数据报表老板看了嫌弃不够直观.生动,客户看了嫌弃不够高大上.这个时候不妨尝试一下使用Dashboard来展示报表数据,可能有些人对Da ...
- 【用户状态】详细解读Oracle用户ACCOUNT_STATUS的九种状态
转至:http://blog.itpub.net/519536/viewspace-672276/ DBA_USERS视图中ACCOUNT_STATUS记录的用户的当前状态,一般情况下在使用的正常用户 ...
- go 中 sort 如何排序,源码解读
sort 包源码解读 前言 如何使用 基本数据类型切片的排序 自定义 Less 排序比较器 自定义数据结构的排序 分析下源码 不稳定排序 稳定排序 查找 Interface 总结 参考 sort 包源 ...