Inno Setup v6.2 安装解压无法充分利用CPU多核性能问题咨询
Inno Setup 大体积安装包解压阶段线程占用低、速度慢的解决方法
首先明确核心认知:islzma64.exe 仅在安装包编译压缩阶段运行,安装阶段的解压逻辑是直接内嵌在生成的安装包二进制中的,完全不会调用这个程序,调整它的相关配置对安装阶段性能没有任何影响,无需在这个文件上耗费精力。
你当前遇到的解压时仅3-4个线程满载、NVMe SSD占用率极低的问题,核心是现有压缩配置的逻辑限制,和硬件性能无关,按以下方式调整即可突破瓶颈:
- 现有配置的核心限制项是
SolidCompression=no:非固体压缩模式下,Inno Setup会对每个文件单独压缩、单独解压,而LZMA2的多线程调度仅对单个连续压缩块生效。你当前设置的字典大小仅1MB,加上2.2万个文件中大量小文件的单块体积远小于1MB,单个解压任务最多只能调用2-4个线程,且逐文件排队解压的线程切换开销极高,自然无法吃满CPU和SSD性能。 - 你之前开启固体压缩触发16GB内存溢出,是因为未手动指定固体块大小,默认ultra64压缩等级下固体块大小会匹配总文件体积,31.5GB的总文件量必然导致内存占用超限,并非固体压缩模式不可用。
可直接替换的[Setup]段优化配置
LZMANumBlockThreads=24 LZMADictionarySize=67108864 LZMANumFastBytes=273 CompressionThreads=auto DisableReadyPage=True InternalCompressLevel=max ; 开启固体压缩,是多线程解压生效的前提 SolidCompression=yes ; 手动指定固体块大小为256MB,单块解压可稳定调用16-24个线程,单块峰值内存占用不超过3GB,16GB内存设备可稳定运行 SolidBlockSize=268435456 Compression=lzma2/ultra64 ; 关闭逐字节进度计算,减少不必要的线程切换开销 ShowBytesProgress=False
额外优化建议
- 对包内已压缩格式的文件(如JPG、MP4、已有压缩包、二进制资源等)单独配置不做二次压缩,可大幅减少编译和解压阶段的无效计算量,配置方式为在
[Files]段对应文件条目中添加CompressionType=none标记。 LZMANumBlockThreads参数仅影响编译阶段的压缩速度,和安装阶段解压性能无关,可根据编译机的线程数灵活调整,不需要追求和总线程数完全一致。- 调整配置后可先做小批量样本测试:取10GB左右的混合大小文件按新配置打包,在测试机上运行安装,可观察到CPU线程占用会提升到16线程以上,NVMe SSD的读取占用也会同步上升,解压速度会有5-10倍的提升。
内容的提问来源于stack exchange,提问作者Michael Zexter
相关产品推荐
相关产品推荐

