MinGW 编译速度过慢
MinGW compiling excessively slow
从几年前开始,我开始在 Windows 7 和 Linux Ubuntu 中使用 Qt,它总是可以快速编译,而 MinGW 被用于 Windows.但在过去几年左右,可能是由于 Qt 和 MinGW 版本的更新,我开始发现 Windows 中的编译速度变慢了。我做了一些研究,试图找出为什么 MinGW 开始变得比 Linux 慢(以前不是!),人们告诉我的一切都是 MinGW 在 Windows 中变慢了,而且它会如果可能的话,最好只使用 Linux。
因为我想继续我的项目,所以我听从了建议,因为我一直在使用 Linux,相对没有问题。现在的情况是,我必须回到Windows(现在更新到Windows 10)来对这个OS进行视觉修正,我需要再次与MinGW一起工作,不得不面对和以前一样的问题。
但不知为何,MinGW 的运行速度似乎变得更糟了!在我至少能够在大约 4 分钟内编译该应用程序之前,现在我最后一次尝试花了 38 分钟 才放弃并入睡 - 这是为了仅需 1:03 分钟即可在 Linux 中编译的项目 [在相同的编译配置下]!
好吧,我仍然知道 MinGW 的速度很慢,但是正如在网络上对这个问题的快速研究所揭示的那样,这只是 太 慢:所有回测都可以在 SO 上的其他线程中找到最多显示 2x-3x 更多时间来编译项目,而不是 38x+!
所以我想知道在我的 Windows 中可能会遇到什么样的问题,才能发生这种夸张的缓慢。我知道我最终安装了至少 4 个不同版本的 MinGW;这会带来问题吗?
有趣的是,当使用 -j
选项进行编译并在 Qt Creator 和 Process Explorer 中查看编译输出日志时,有时编译会简单暂停 10 秒或更长时间,并且 CPU 使用率从 ~100% 下降到接近 5%,直到它突然继续编译过程之前什么都没有发生。我确信这种持续的停顿是上述平均时间的一部分,但我不知道为什么 MinGW 会出现这种行为。
您可能想查看时间花在了哪里。
有很多工具可以让您捕获某个进程正在做什么,我只举出其中两个:
但要分析这些工具生成的报告,您需要有相当深入的了解。如果这无济于事,请逐步禁用其他 运行 服务和程序(如果您想知道是哪个程序导致了问题)或一次禁用所有这些服务和程序。
查看 sysinternals 的 TaskManager 或 Procexp 显示的 cpu 使用峰值可能也有助于识别那些阻止您的 cpu 的组件。
如果您的防病毒软件是造成编译速度如此缓慢的冲突的原因,您可以定义异常,那么防病毒软件将不会扫描某些程序或路径。
因此,首先使用禁用的防病毒软件或什至从干净的实时启动 Windows CD 尝试编译过程可能更容易。
从几年前开始,我开始在 Windows 7 和 Linux Ubuntu 中使用 Qt,它总是可以快速编译,而 MinGW 被用于 Windows.但在过去几年左右,可能是由于 Qt 和 MinGW 版本的更新,我开始发现 Windows 中的编译速度变慢了。我做了一些研究,试图找出为什么 MinGW 开始变得比 Linux 慢(以前不是!),人们告诉我的一切都是 MinGW 在 Windows 中变慢了,而且它会如果可能的话,最好只使用 Linux。
因为我想继续我的项目,所以我听从了建议,因为我一直在使用 Linux,相对没有问题。现在的情况是,我必须回到Windows(现在更新到Windows 10)来对这个OS进行视觉修正,我需要再次与MinGW一起工作,不得不面对和以前一样的问题。
但不知为何,MinGW 的运行速度似乎变得更糟了!在我至少能够在大约 4 分钟内编译该应用程序之前,现在我最后一次尝试花了 38 分钟 才放弃并入睡 - 这是为了仅需 1:03 分钟即可在 Linux 中编译的项目 [在相同的编译配置下]!
好吧,我仍然知道 MinGW 的速度很慢,但是正如在网络上对这个问题的快速研究所揭示的那样,这只是 太 慢:所有回测都可以在 SO 上的其他线程中找到最多显示 2x-3x 更多时间来编译项目,而不是 38x+!
所以我想知道在我的 Windows 中可能会遇到什么样的问题,才能发生这种夸张的缓慢。我知道我最终安装了至少 4 个不同版本的 MinGW;这会带来问题吗?
有趣的是,当使用 -j
选项进行编译并在 Qt Creator 和 Process Explorer 中查看编译输出日志时,有时编译会简单暂停 10 秒或更长时间,并且 CPU 使用率从 ~100% 下降到接近 5%,直到它突然继续编译过程之前什么都没有发生。我确信这种持续的停顿是上述平均时间的一部分,但我不知道为什么 MinGW 会出现这种行为。
您可能想查看时间花在了哪里。
有很多工具可以让您捕获某个进程正在做什么,我只举出其中两个:
但要分析这些工具生成的报告,您需要有相当深入的了解。如果这无济于事,请逐步禁用其他 运行 服务和程序(如果您想知道是哪个程序导致了问题)或一次禁用所有这些服务和程序。 查看 sysinternals 的 TaskManager 或 Procexp 显示的 cpu 使用峰值可能也有助于识别那些阻止您的 cpu 的组件。 如果您的防病毒软件是造成编译速度如此缓慢的冲突的原因,您可以定义异常,那么防病毒软件将不会扫描某些程序或路径。
因此,首先使用禁用的防病毒软件或什至从干净的实时启动 Windows CD 尝试编译过程可能更容易。