web-dev-qa-db-ja.com

.NETランタイム最適化サービスがバッテリーで実行されないようにしますか?

今朝ラップトップを開いたとき、(アップデートのインストール後に)再起動していました。現在、.NETランタイム最適化サービス(ngen?)は、コンピューターがバッテリーで動作している間、かなりのCPUを使用しています。ラップトップが接続されるまでこれらのタスクを延期するようにWindowsに要求する方法はあるのでしょうか。ラップトップを一晩接続しましたが、バッテリーの30%が1時間も経たないうちになくなってしまいました。これは通常の状況ではありません。

これを実行している間、コンピューターはアイドル状態ではなかったため、.Net Frameworkの更新後に優先度の高いアセンブリをコンパイルすると想定します この記事から

Windowsの更新履歴を確認したところ、プラグイン中に累積的な更新が一晩インストールされました。( https://support.Microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 )。 Windowsがそのプロセスの一部として.net最適化を実行して、バッテリーでラップトップを使用し始めるのを待つのではなく、.

Task Manager

10
user114447

短い答えは「いいえ」であり、確実にngenを据え置くことはできません(試行するべきではありません)。私が見つけた唯一の一貫した/有用なオプションは、実行を強制的に完了させ、バックグラウンドに潜んでいないことです。

バッテリーのCPUサイクルを節約しようとする場合(または私の場合は、Windowsの更新後にサーバーをサービスに戻した後でサーバーがngenを実行するのを停止します)、最善のオプションは、ngenを強制的に実行することです。デスクトップPCの場合、2つのオプションが思い浮かびます:

  1. 以下の適切なngenコマンドを使用して、デスクトップに.batまたは.ps1ファイルを作成します。ダブルクリックし、ngenが閉じるのを待ってから取り外します。代わりにWindowsフォルダーにスクリプトを作成し、それをデスクトップにショートカットする場合は、コマンドまたはPowershellプロンプトまたは実行ダイアログを使用して、必要に応じて(プラグを抜く前または更新後に)スクリプトを実行することもできます。

  2. 機能する別のオプションは、スケジュールされたタスクを使用して上記のスクリプトを実行することです。起動時に、管理者としてログオンしているユーザーなしで実行します。ラップトップが夜間にアップデートをインストールでき、再起動できる場合、これは問題なく動作するはずです。

Ngenを実行するには、次のコマンドのいずれか1つだけが必要です。システムに応じて、最初の/最も適切なオプションを使用してください。

  • 64ビットの.Net 4以上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.

executeQueuedItemsを指定してngen.exeを実行すると、保留中のすべてのタスクが可能な限り迅速に実行されます。通常、ngenは優先度の低いバックグラウンドスレッドで実行されます(そして明らかにランダムに開始するだけです)。これは、CPUの他のプロセスを枯渇させるべきではないという考えです。ただし、常に機能するとは限りません。 ngenをインタラクティブに実行すると、バックグラウンドで実行したままにするよりも高速ですが、パフォーマンスへの影響が大きくなります。所要時間は、ハードウェアと、再コンパイルが必要なネイティブイメージの数と数によって異なります。

4
MisterSmith