上周,我发布了对.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升级瘦身引擎,并支持剪裁计划的录制和回放的更多相关文章

  1. Excel催化剂开源第6波-Clickonce部署之自动升级瘦身之术

    Clickonce无痛自动更新是我最喜欢使用VSTO开发并Clickonce部署的特性之一,但这个自动更新,通常会更新整个程序文件,包含所有的引用dll和一些资源文件等. 一般来说,我们更新的都是主程 ...

  2. 一个更好用的.NET Core程序瘦身器,减小程序尺寸到1/3

    一.为什么要开发.NET Core程序瘦身器? .NET Core具有[剪裁未使用的代码]的功能,但是由于它是使用静态分析来实现的,因此它的剪裁效果并不是最优的.它有如下两个缺点: 不支持Window ...

  3. 使用.NET Core创建Windows服务 - 使用.NET Core工作器方式

    原文:Creating Windows Services In .NET Core – Part 3 – The ".NET Core Worker" Way 作者:Dotnet ...

  4. .NET跨平台实践:Linux .Net Core自宿主应用程序瘦身记

    一,.NET Core 自宿主应用程序个头很大 发布.NET Core应用程序有两个方式,一种是“便携式”,一种是“自宿主式”.便携式发布时,目标程序不带.net core运行环境,所以“个头”很小, ...

  5. dotnet core瘦身发布

    需要安装nuget包Microsoft.Packaging.Tools.Trimming然后利用如下命令发布dotnet publish -r win10-x64 -c release --self- ...

  6. .net core 拦截器的使用

    .net core 拦截器的使用 实例代码:https://gitee.com/D_C_L/InterceptorTest.git 拦截器主要是将程序中的一些可以独立出去的模块进行拦截,比如幕等性,和 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来

    上一篇文章(https://www.cnblogs.com/meowv/p/12896177.html)已经成功创建了博客项目,但是abp默认给我们引用了许多项目中用不到的组件. 本篇文章将给项目进行 ...

  8. iOS安装包瘦身的那些事儿

    在我们提交安装包到App Store的时候,如果安装包过大,有可能会收到类似如下内容的一封邮件: 收到这封邮件的时候,意味着安装包在App Store上下载的时候,有的设备下载的安装包大小会超过100 ...

  9. Android App安装包瘦身计划

    Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...

随机推荐

  1. MySQL手写代码相关变量

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11777682.html 手写一些SQL代码时候需要用到的关键字. DELIMITER, BEG ...

  2. tabbar选中按钮的标题颜色和字体

    @implementation XMGTabBarController /* 问题: 1.选中按钮的图片被渲染 -> iOS7之后默认tabBar上按钮图片都会被渲染 1.修改图片 2.通过代码 ...

  3. Docker-Compose 容器集群的编排

    Docker-Compose 容器集群的编排 1.Docker-Compose 概述 2.Docker Compose 环境安装 Docker-Compose功能:  可以实现单机上的容器集群编排 1 ...

  4. insert/delete/select/update 以及一些在select中常用的函数之类的

    crud程序员:create,read,update.delete 一.insert 细节说明: 1.插入的数据应与字段的数据类型相同.比如把'abc'添加到int类型会错误2.数据的长度应在列的规定 ...

  5. linux_14

    简述CGI与FASTCGI区别 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构 通过loganalyzer展示数据库中的日志

  6. 如何看懂时序图,以DHT21为例

    有很多传感器手册给了我们时序图,我们只要按照时序图操作就行了,还有一些是标准接口,例如SPI,IIC,UART,这些可以利用硬件提供的收发器通信,还有一些我们没有足够的接口,或者没有对应的接口与之通信 ...

  7. 都 2022 了,还不抓紧学 typeScript ?

    Hi,我是前端人,今日与君共勉! 本篇文章主要介绍的是什么是 typeScript ? typeScript 与 javaScript 有什么关系呢?我们为什么要学习 typeScript ? 一.什 ...

  8. python-对于一个用例有多个步骤,转换成1条案例的处理方法

    前言 对于前文写到的以excel数据驱动的框架中,每个用例都是单独的不依赖其他的案例,现在一个用例可能会有多个步骤,按照前面写道的博文中按excel表中逐行取出excel的值,那么一条用例有多个步骤, ...

  9. MShadow中的表达式模板

    表达式模板是Eigen.GSL和boost.uBLAS等高性能C++矩阵库的核心技术.本文基于MXNet给出的教程文档来阐述MXNet所依赖的高性能矩阵库MShadow背后的原理. 编写高效的机器学习 ...

  10. 密码破解工具Brutus

    实验目的 利用brutus将暴力破解ftp密码 实验原理 brutus将多次尝试ftp密码进行密码爆破 实验内容 利用brutus将暴力破解ftp密码 实验环境描述 1. 学生机与实验室网络直连; 2 ...