当我对大量文件(> 2GB)运行Inno Setup时,需要很长时间才能运行。我相信它将时间花在压缩上,这应该是受CPU限制的,但是它只使用了几个CPU。有没有办法将其分布在更多的内核上?
具体来说,我正在使用这个boost-release repository,它的Inno Setup脚本包括:
[Setup]
....
Compression=lzma2/ultra64
....
[Files]
Source: "boost_1.69.0/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs ignoreversion
....
在具有16个内核和32GB RAM(Azure F16s v2)的计算机上,调用Compil32.exe boost_installer.iss
大约需要25分钟。
文件集大约为2.5GB,其中2GB是大约300个编译库的集合。剩余的500MB是60,000个源文件。
答案 0 :(得分:1)
尝试设置LZMANumBlockThreads
directive(默认值为1):
当压缩大量数据时,LZMA2压缩器具有将数据划分为“块”的能力,并可以通过使用附加线程来并行压缩其中两个或多个这些块(提供足够的处理器能力)。该指令指定要使用的线程数,即LZMA2压缩器可以并行压缩的最大块数。
答案 1 :(得分:1)
因此,要深入了解这一点,我创建了一个test project,它对各种Inno Setup配置选项进行了各种排列。
我发现有用的(并使我的速度提高了40%!)是
SolidCompression=yes
LZMASeparateProcess=yes
LZMANumBlockThreads=6
在没有SolidCompression
的情况下,LZMANumBlockThreads
的影响不大。但是在一起,我看到了一个更典型的可并行化的问题,其中更多的线程给出了更快的结果。
如果您觉得这很有趣,我建议您使用writeup,它有很多数据可以备份。