找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 574|回复: 32

[求助] 7z文件解压后重新打包压缩率降了一倍

  [复制链接]
发表于 前天 14:06 | 显示全部楼层 |阅读模式
本帖最后由 2013kyj 于 2026-4-17 14:07 编辑

下载 下面链接中的 dotNetFx48_20260414_x64.WA 文件, 文件体积不到50M, 但是我用7z解压后, 再次把文件夹用极限压缩比压缩,大小都超过了100M, 这是为啥?  这里有什么科技与狠活?

路过的大佬可以试下

https://github.com/abbodi1406/dotNetFx4xW7A/releases/tag/26.04.14

发表于 前天 14:14 | 显示全部楼层
因为同样用7z,你的压缩算法,和对方的压缩算法和配置不一样
回复

使用道具 举报

发表于 前天 14:35 | 显示全部楼层
应该是算法设置问题吧
回复

使用道具 举报

发表于 前天 14:46 来自手机 | 显示全部楼层
https://bbs.wuyou.net/forum.php?mod=viewthread&tid=445814
回复

使用道具 举报

发表于 前天 14:47 | 显示全部楼层
本帖最后由 a66 于 2026-4-17 14:49 编辑

这个 dotNetFx48_20260414_x64.WA 不是普通压缩包,而是 微软专用超压缩格式 + 专业级固实压缩,你用 7z 解压后,已经把 “极限压缩” 破坏了,再压当然变大。

WA = Windows Admin 安装包 / 微软超压缩
不是 zip/rar/7z,而是微软自家的:
  • WIM 超压缩(LZX 最高压缩)
  • ESD 加密超压缩
  • 自制固实压缩归档
特点:
  • 单文件、固实、全局字典、跨文件共享重复数据
  • 压缩率远高于普通 7z/zip
  • 解压后会炸成一堆零散小文件


回复

使用道具 举报

发表于 前天 14:51 | 显示全部楼层


原文件(.WA)是【全局固实压缩】
  • 几百个 .NET 文件压成一个整体
  • 重复代码、字符串、PE 段、元数据全局只存一份
  • 字典巨大,能跨文件消除冗余
    → 所以能压到 47MB

解压后变成【几百个独立文件】
  • 每个文件独立头部、独立结构、独立冗余
  • 7z 再压时:
    • 只能对单个文件内部压缩
    • 无法像原作者那样跨文件全局去重
    • 还要额外加压缩包索引、元数据
      → 体积直接反弹到 100MB+

.NET 文件本身就是 “难再压” 的结构
  • 大量 IL 指令、元数据、NGen 镜像、资源流
  • 已经被微软编译时高度优化、密度极高
  • 普通压缩算法很难再榨出空间

解压后,破坏了固实压缩

回复

使用道具 举报

发表于 前天 14:55 | 显示全部楼层
学习一下,我也碰到过这情况。
回复

使用道具 举报

发表于 前天 15:28 | 显示全部楼层
楼主,你用我这个参数来压,就能压得更小

字典如果选默认的256M的话,压缩后就比原来的大一点


2026-04-17_152533.png


点评

确实,调到 512 比 256 进行压缩,体积会小些。 但不清楚 f=BCJ2 这个参数的作用是什么?  详情 回复 发表于 前天 20:52
感谢分享, 有用  详情 回复 发表于 前天 17:56
回复

使用道具 举报

发表于 前天 15:38 | 显示全部楼层
压缩算法不一样
回复

使用道具 举报

发表于 前天 17:15 | 显示全部楼层
微信图片_20260417171301.png


版本26.00压出来比作者的还小一点

点评

感谢分享, 勾选上"压缩共享文件"作用没有多大区别  详情 回复 发表于 前天 17:57
回复

使用道具 举报

 楼主| 发表于 前天 17:56 | 显示全部楼层
laozhao 发表于 2026-4-17 15:28
楼主,你用我这个参数来压,就能压得更小

字典如果选默认的256M的话,压缩后就比原来的大一点

感谢分享, 有用
回复

使用道具 举报

 楼主| 发表于 前天 17:57 | 显示全部楼层
2011lerv 发表于 2026-4-17 17:15
版本26.00压出来比作者的还小一点

感谢分享,
勾选上"压缩共享文件"作用没有多大区别
回复

使用道具 举报

发表于 前天 18:25 | 显示全部楼层
你软件没操作对,要用 LZMA2,我实际验证了一下,dotNetFx48_20260414_x86.wa 为35 759KB,重新打包 35 777KB。如果用群里的工具,应该还能再小一点
回复

使用道具 举报

发表于 前天 18:57 | 显示全部楼层
和被压缩的文件有关系吧,比如视频图片用rar7z没什么用,体积不会有任何变化
回复

使用道具 举报

发表于 前天 19:05 | 显示全部楼层
学习时间
回复

使用道具 举报

发表于 前天 19:06 | 显示全部楼层
学习一下,我也碰到过这情况。
回复

使用道具 举报

发表于 前天 20:52 | 显示全部楼层
laozhao 发表于 2026-4-17 15:28
楼主,你用我这个参数来压,就能压得更小

字典如果选默认的256M的话,压缩后就比原来的大一点

确实,调到 512 比 256 进行压缩,体积会小些。
但不清楚 f=BCJ2 这个参数的作用是什么?

2026-04-17_152533.png

点评

f=BCJ2 说白了就是提高可执行文件(.exe, .dll, .sys, .ocx, .sfx等)的压缩率。  详情 回复 发表于 昨天 08:36
百度一下: f=BCJ2‌ 是 7-Zip 中用于可执行文件(如 .exe、.dll)的过滤器(Filter),全称为 Branch Call Jump 2,其作用是在压缩前对可执行文件中的跳转、调用等指令进行预处理,使数据模式更利于压缩,从而‌提  详情 回复 发表于 昨天 08:07
回复

使用道具 举报

发表于 前天 21:26 来自手机 | 显示全部楼层
反正NSIS自带的7z压缩率一般
回复

使用道具 举报

发表于 昨天 01:14 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 昨天 08:07 | 显示全部楼层
xmzhqw 发表于 2026-4-17 20:52
确实,调到 512 比 256 进行压缩,体积会小些。
但不清楚 f=BCJ2 这个参数的作用是什么?

百度一下:
f=BCJ2‌ 是 7-Zip 中用于可执行文件(如 .exe、.dll)的过滤器(Filter),全称为 Branch Call Jump 2,其作用是在压缩前对可执行文件中的跳转、调用等指令进行预处理,使数据模式更利于压缩,从而‌提升压缩率‌。
该参数特别适用于压缩 ‌Windows 可执行文件或二进制程序‌,在使用 LZMA 或 LZMA2 算法时效果显著。通常建议在高/极限压缩等级(-mx9)下配合使用,以获得更小的文件体积。
常见用法示例:
图形界面设置:在 7-Zip 的“添加到压缩包”窗口中,压缩选项 → 点击“过滤器”下拉菜单 → 选择“BCJ2”。
命令行使用:
7z a archive.7z *.exe -mx9 -m0=LZMA2 -f=BCJ2
⚠️ 注意:对于非可执行文件(如文本、图片、视频),启用 BCJ2 可能反而降低压缩效率或增加时间,建议仅在压缩程序类文件时启用。


点评

谢谢解答!  详情 回复 发表于 昨天 11:39
回复

使用道具 举报

发表于 昨天 08:14 | 显示全部楼层
附图的7z压缩参数:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\7-Zip\Compression\Options\7z]
"Options"="f=BCJ2"
"Level"=dword:00000009
"Dictionary"=dword:20000000
"Order"=dword:00000111
"BlockSize"=dword:00000040
"NumThreads"=dword:00000006

20260418.png

点评

"NumThreads"=dword:00000003 更合理一些,绝大多数人的内存达不到128G  发表于 昨天 09:10

评分

参与人数 1无忧币 +3 收起 理由
2013kyj + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 昨天 08:36 | 显示全部楼层
xmzhqw 发表于 2026-4-17 20:52
确实,调到 512 比 256 进行压缩,体积会小些。
但不清楚 f=BCJ2 这个参数的作用是什么?

f=BCJ2
说白了就是提高可执行文件(.exe, .dll, .sys, .ocx, .sfx等)的压缩率。

点评

懂了!mark一下!  发表于 昨天 14:26
懂了,谢谢!  详情 回复 发表于 昨天 11:39
回复

使用道具 举报

发表于 昨天 08:40 | 显示全部楼层
未标题-2.png
7Z压缩下来比原版更小,原版更大一些

未标题-1.png


回复

使用道具 举报

发表于 昨天 11:15 来自手机 | 显示全部楼层
压缩的最小的格式是哪个
回复

使用道具 举报

发表于 昨天 11:39 | 显示全部楼层
ddzyhhh 发表于 2026-4-18 08:36
f=BCJ2
说白了就是提高可执行文件(.exe, .dll, .sys, .ocx, .sfx等)的压缩率。

懂了,谢谢!
回复

使用道具 举报

发表于 昨天 11:39 | 显示全部楼层
jlshnlhj 发表于 2026-4-18 08:07
百度一下:
f=BCJ2‌ 是 7-Zip 中用于可执行文件(如 .exe、.dll)的过滤器(Filter),全称为 Branch Ca ...

谢谢解答!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-4-19 17:29

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表