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


10

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

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

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

タスクマネージャー


同じサービスが突然大量のCPUを消費するのを見ただけで、ファンが大きくなった。しかし、私の場合は、2時間使用してコンピュータをスリープ状態にした後のことです。私はサービスを停止できませんでした(詳細ビューで上記の掲示されているウィンドウでも)。5〜10分後には終わったので、数分待つだけの問題だと思います
hansaplast

回答:


4

短い答えは「いいえ」であり、ngenを確実に据え置くことはできません(試行するべきではありません)。

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

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

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

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

  • .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

  • 32ビットで.Net 3以下 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をインタラクティブに実行すると、バックグラウンドで実行したままにするよりも高速ですが、パフォーマンスへの影響が大きくなります。所要時間は、ハードウェアと、再コンパイルが必要なネイティブイメージの数と数によって異なります。


マシンを数分間アイドル状態(実際にはVirtualbox VM)のままにしておくと、ngen.exeがすべてのCPUを消費し始めます。ただし、管理者のコマンドウィンドウで上記のコマンドのいずれかまたはすべてを実行すると、「すべてのコンパイルターゲットが最新の状態です」とすぐに返されます。:-( [ああ-多分これは開発マシンだと
言ったはずです。VisualStudio
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.