简短的答案是不,您不能可靠地推迟使用ngen(并且您不应该尝试),我发现的唯一一致/有用的选择是强制其运行到完成状态,而不是让它潜伏在后台。
如果您试图节省电池的CPU周期(或者在Windows更新后将服务器重新投入使用,则停止服务器运行ngen的工作),最好的选择是强制ngen自行运行。对于台式机,有两种选择:
使用下面的相应ngen命令在桌面上创建.bat或.ps1文件-只需双击并等待ngen关闭,然后再拔出电源。如果改为在Windows文件夹中创建脚本,然后在桌面上创建该脚本的快捷方式,则还可以根据需要使用Command或Powershell Prompt或“运行”对话框来执行该脚本(在拔出/更新之后)。
另一个可行的选择是使用计划任务执行上述脚本。在启动时以管理员身份运行,无需登录用户。如果您的笔记本电脑可以在一夜之间安装更新程序并可以重新启动,则应该可以正常工作。
要运行ngen,您仅需要以下命令之一,请为您的系统使用第一个/最合适的选项:
.Net 4或更高版本(64位)
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems
.Net 4或更高版本(32位)
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems
.Net 3或更少(64位)
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems
.Net 3或以下(32位)
C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems
以下是没有排队项目时从ngen获得的最小输出:
PS C:\Users\Administrator> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems
Microsoft (R) CLR Native Image Generator - Version 4.6.1586.0
Copyright (c) Microsoft Corporation. All rights reserved.
All compilation targets are up to date.
当运行ngen.exe时executeQueuedItems
,它将强制其尽快执行所有待处理的任务。通常,ngen在低优先级的后台线程上运行(并且显然只是随机启动),这种想法是它不应该饿死其他CPU进程-尽管这并不总是有效。交互式运行ngen比在后台运行ngen更快,但是它将对性能产生更大的影响。需要多长时间取决于您的硬件以及需要重新编译多少本机映像。