【问题标题】:Create installer with Inno Setup faster使用 Inno Setup 更快地创建安装程序
【发布时间】:2018-12-31 12:59:27
【问题描述】:

当我在大量文件 (>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 个源文件。

【问题讨论】:

  • 编译后运行时间长还是编译时间长? “很长一段时间”究竟是什么?多久时间?在不同的机器上花费的时间是否不同?
  • 添加了更多关于性能的细节。

标签: inno-setup


【解决方案1】:

因此,为了深入了解这一点,我创建了一个 test project,它经历了各种 Inno Setup 配置选项的各种排列。

我发现有用的(并让我的速度提高了 40%!)是:

SolidCompression=yes
LZMASeparateProcess=yes
LZMANumBlockThreads=6

没有SolidCompressionLZMANumBlockThreads 不会产生太大影响。但是在一起,我看到了一个更典型的可并行化问题,其中更多的线程给出了更快的结果(在一定程度上)。

如果你觉得这很有趣,我会推荐我在上面做的writeup,它有很多数据可以备份。

【讨论】:

  • 我看到“LZMASeparateProcess=yes”似乎不再受支持。
【解决方案2】:

尝试设置LZMANumBlockThreads directive(默认值为1):

在压缩大量数据时,LZMA2 压缩器能够将数据分成“块”,并通过使用额外的线程并行压缩两个或多个这些块(前提是有足够的处理器能力可用)。该指令指定要使用的线程数——即 LZMA2 压缩器可以并行压缩的最大块数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2015-05-18
    • 2011-01-29
    相关资源
    最近更新 更多