15

mscorsvw.exe (アセンブリをプリコンパイルする .NET 最適化) が CPU のかなりの割合 (50 ~ 100%) を占めています。

この記事 (および他の多くの記事) は、次のように述べています。

ngen.exe executequeueeditems

コマンドラインからそれを殺す必要があります。私にとって、そのコマンドはただハングします。このプロセスを強制終了するより良い方法はありますか?

再起動は試していません。ここ数日で、CPU 使用率が何度も急上昇しているのを見てきましたが、これが私の問題ではないかと思います。今後の倒し方が知りたいです。

4

6 に答える 6

15

試す

ngen queue status

うまくいけば、単に「実行中」以上のものを表示し、コンパイルしようとしているものを表示します。コマンドはngen queue stopサービスを停止します。

このサービスは、インストーラーがアセンブリを展開し、サービスにそれを .xml でプリコンパイルするように要求したときに実行を開始しngen installます。明らかに、マシンに問題があります。アセンブリをコンパイルするために何度も失敗していると思います。これに関するブレッドクラムについては、Windows イベント ログを確認してください。これを行ったプログラムをアンインストールします。

于 2011-06-24T15:51:25.687 に答える
10

この記事 (および他の多くの記事) は、次のように述べています。

ngen.exe executequeueeditems

コマンドラインからそれを殺す必要があります。私にとって、そのコマンドはただハングします。> このプロセスを強制終了するより良い方法はありますか?

いいえ; それはそれを殺しません。代わりに、意図的に悪化させます。バックグラウンド コンパイルを少しずつ (通常は気付かないように) 行う代わりに、キューに入れられたすべてのアイテムを一度に処理します。これは完了するまでに時間がかかります。ハングアップしません。非常に懸命に動作します。完了すると、完了し、バックグラウンドでコンパイルする必要がなくなります。

最近のアップグレード (おそらくサービス パックをインストールした) によって、バックグラウンド コンパイル ジョブが (おそらく) 追加されていることに注意してください。Windows は、正確なハードウェアとプロセッサの種類をすべて認識している .NET JIT コンパイラを使用して、すべてのマネージ アセンブリを AOT コンパイルすることで、最も最適化されたコードを出力するようにしています。このように、.NET は、アセンブリを今コンパイルすることを犠牲にして、ソフトウェアが将来より高速に実行されることを保証します。

自分自身に間接的にリンクした多くのリソースのうち、これを読んでください。

于 2011-06-24T15:39:33.303 に答える
5

私の意見では、.NET には問題のある設計がいくつかあります。「ジャスト イン タイム」コンパイラがすべてを実行して、It's Time の前にコンパイルする必要がある場合です。

通常、2 つのmscorsvwデーモンが実行されています。1 つは 64 ビット用で、もう 1 つは 32 ビット用です (これらは互いに同期します)。100% の CPU 使用率はコンパイラに期待されるものですが、これは低い優先度で実行され、一度に 1 つ以上のコアが拘束されることはありません。マルチコア CPU の利点の 1 つは、このようなものでも、ユーザー インターフェイスの相互作用を駆動するコアが残っていることです。(検索インデクサーは、同じ方針に沿って設計された、同じ一般的な種類の別のデーモンであることに注意してください。)シングルコア CPU を使用している場合は、追加された負荷に実際に気付くでしょう。

于 2011-08-11T07:03:44.813 に答える
3

これは、典型的なバグベースで発生することがあります。SQL Server msiexec.exe プロセスの私の場合、SQL Server 2012 SP1 のインストール後も実行され続けます通常どおり次の更新を待ちます。

于 2013-01-04T02:00:10.383 に答える
2

SQL 2012 をインストールした後、同じ問題が発生しました。コマンド ngen queue status を実行した後、実行されていたのは CLR 最適化プロセスであることがわかりました。再びこのスレッドを使用して、32 ビットと 64 ビットの最適化コードを示す Microsoft.NET Framework NGEN v4.0.30319_X64 と Microsoft.NET Framework NGEN v4.0.30319_X64 の 2 つのサービスがあることを確認できました。

この2つが起動していることがわかり、x86バージョンが原因でした。サービスを停止したところ、CPU が 100% から 0% に戻り、メモリが約 2GB 減少しました。

于 2013-01-14T18:28:27.523 に答える
-1

ご覧ください、.NET はシングル コアのメディア センター PC を殺します。古いコンピューターは何時間も遅くなり、Web ベースのビデオは見られないほど途切れ途切れになります。エネルギー効率についてはこれで十分です。PC を 24 時間 365 日コンパイルしたままにしておく必要がありますか? ユーザー主導のプロセスは優先されません。.NET を含めて、自動更新を無視することはありません。これにより、すべてのリソースが再度再コンパイルされ、火曜日のパッチまでに完了することはありません。提案された回避策 (「ngen.exe install /queue」または「ngen.exe update」 - 関連するフレームワーク ディレクトリで ngen を見つける) が応答することはありません。そう。services.msc で Microsoft .NET Framework NGEN サービスを無効にします - またはコマンド ラインから ('sc config clr_optimization_v4.xxxx start= disabled' xxxx はバージョン番号です。sc クエリまたはディレクトリ名または services.msc でバージョン番号を取得します); ' stop' は数秒以内に再起動します。.NET 4 の完全な削除を検討または試みます。

于 2016-10-08T00:15:50.657 に答える