阻止 .NET 运行时优化服务使用电池运行?

11 laptop battery windows-update .net-framework windows-10

当我今天早上打开我的笔记本电脑时,它已经重新启动(安装更新后)。现在 .NET 运行时优化服务 (ngen?) 在计算机使用电池时使用了相当多的 CPU。我想知道,有没有办法让 Windows 推迟这些任务,直到笔记本电脑插入电源?我让笔记本电脑通宵插电,但在使用不到一个小时后,我的电池电量耗尽了 30%,这不是通常的情况。

有人这样做,而我的电脑是没有闲着,所以我一个.NET Framework更新后承担其编制高优先级的组件从这篇文章

我检查了 Windows 更新历史记录,它在插入时在一夜之间安装了累积更新。(https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788)。我希望 Windows 将运行 .net 优化作为该过程的一部分,而不是等待我开始使用电池供电的笔记本电脑。

任务管理器

Mis*_*ith 6

简短的回答是否定的,你不能可靠地延迟 ngen(你不应该尝试),我发现唯一一致/有用的选项是强制它运行完成而不是让它潜伏在后台。

如果您试图在电池上节省一些 CPU 周期(或者在我的情况下停止服务器在 Windows 更新后恢复服务后运行 ngen),您最好的选择是强制 ngen 自己运行。对于台式电脑,我想到了 2 个选项:

  1. 使用以下相应的 ngen 命令在您的桌面上创建一个 .bat 或 .ps1 文件 - 只需双击并等待 ngen 关闭,然后再拔出。如果您改为在 Windows 文件夹中创建脚本并在桌面上创建该脚本的快捷方式,您还可以使用 Command 或 Powershell Prompt 或“运行”对话框根据需要(在拔出电源之前/更新之后)执行它。

  2. 另一个可行的选择是使用计划任务来执行上述脚本。在启动时运行它,无需登录用户,以管理员身份运行。如果您的笔记本电脑被允许在一夜之间安装更新并且可以重新启动,这应该可以很好地工作。

要运行 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.
Run Code Online (Sandbox Code Playgroud)

当 ngen.exe 与executeQueuedItems它一起运行时,它将强制它尽快执行所有挂起的任务。通常 ngen 在一个低优先级的后台线程上运行(显然只是随机启动),这个想法是它不应该饿死其他 CPU 进程——尽管这并不总是有效。以交互方式运行 ngen 比让它在后台运行更快 - 但它会更多地影响性能。需要多长时间取决于您的硬件以及需要重新编译多少/哪些本机映像。