4

数千行と数スレッドの C# プログラムを作成しました。Windows サーバーで実行されているアプリケーションが突然 CPU の約 50 ~ 80% を使用し始めるため、すべて (他のプログラム/Web サーバー) の速度が低下し始めるまで、実行は数時間または数日間正常に機能します。

while ループに引っかかっていると思いますが、正確な場所はわかりません。どのスレッドがシステム リソースの最大のシェアを使用しているかを知ることは、すでに役に立ちます。例外がスローされないため、直接調べる可能性はありません。

コードは既に検査されていますが、重大な/明らかなプログラミング ミスは見つかりませんでした。

どこで使用されているかを示すために、Visual Studio に現在の CPU 負荷を監視させる良い方法を知っている人はいますか?

4

2 に答える 2

7

ああ、マネージド スタック エクスプローラーが大好きです。.NET のほとんどのバージョンについてはhttp://mse.codeplex.com/、4.0についてはhttps://github.com/vadimskipin/MSE

実行中のアプリケーションに向けると、各スレッドのスタックのスナップショットが作成されます。いくつかのスナップショットを確認すると、どこに問題があるかがわかります。ああ、私が最初にこれを知ったとき、私が直面していた問題の厄介さ。何日も探していたものをほんの数分で見つけられたときの喜び。

于 2012-08-27T16:47:39.823 に答える
2

Perfview (http://www.microsoft.com/en-us/download/details.aspx?id=28567) を使用して、これが発生したときに ETL トレースをキャプチャして分析できます。

于 2012-08-27T16:48:47.350 に答える