我们将定期使用Visual Studio(2013)编译大型C ++项目。在开发人员机器上构建源代码最多需要45分钟。 在此期间,由于100%CPU负载,计算机通常变得无响应。 有没有办法告诉Visual Studio以较低的进程优先级运行编译/生成工具,从而不会降低Windows UI的速度? 如果我可以同时做其他事情,我很乐意让机器在构建过程上花费更多的时间。
自安装SSD以来,问题甚至变得更加烦人! 尽管总体构建时间得到了显着改善,但由于现在不再存在磁盘瓶颈,因此构建过程甚至更频繁地遇到CPU最大负载,从而导致系统无响应。
如何解决此问题?
答案 0 :(得分:2)
我刚刚找到以下线程,其中一个叫Mikhail Virovets的人提供了自动解决方案:https://developercommunity.visualstudio.com/idea/436208/limit-cpu-usage-of-visual-studio.html
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cl.exe\PerfOptions
下的注册表中,创建一个名为DWORD
的{{1}}值并将其设置为CpuPriorityClass
。这会将具有该名称的 all 新创建进程的基本优先级设置为5
。您可能还应该为链接器创建一个类似的条目。
当然,这更具侵入性,因为它将影响具有这些名称的所有进程,无论在何处,何时以及如何创建它们。但是我认为这可能会很好。
别忘了您添加了这些值,以防将来导致某些不必要的变慢,否则您可能会长期寻找该问题。
您可以使用以下.reg文件将编译器和链接器的CPU和IO优先级设置为“低于正常” /“低于”:
below normal
我面临着同样的问题,这确实使我很烦。作为权宜之计,我创建了一个小的批处理文件,该文件只是降低了最重要的构建工具的处理优先级:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cl.exe]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cl.exe\PerfOptions]
"CpuPriorityClass"=dword:00000005
"IoPriority"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\link.exe]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\link.exe\PerfOptions]
"CpuPriorityClass"=dword:00000005
"IoPriority"=dword:00000001
(这是针对C ++构建的,如果您构建其他内容,则可能需要将.exe名称更改为您的主要构建工具。)
当然,这只会影响当前正在运行的进程,因此您必须在每次开始构建时都运行它。不过,新创建的子进程(编译器,链接器等)的优先级是从MSBuild主过程继承的,因此这不仅会影响当前正在运行的编译器/链接器实例,还会影响整个构建。
我在wmic process where name="msbuild.exe" CALL setpriority "idle"
wmic process where name="cl.exe" CALL setpriority "idle"
wmic process where name="link.exe" CALL setpriority "idle"
和Command: cmd.exe
中添加了一个“外部工具”条目,以便可以从Visual Studio中启动批处理文件。
一个更方便的解决方案可能是向构建中添加自定义任务,以更改流程优先级。由于AFAIK任务是从MSBuild主过程中执行的,因此应该可以工作。但是我还没有尝试一下。