0

WindowsのDebugDiagに関する以前の経験はなく、このレポートについていくつかの洞察が必要です。.NET Whileループを使用してThreading.Taskを維持する方法

私のEWS Managed APIアプリケーションは、イベントが発生するたびに新しいタスクにまたがります。

私のアプリは〜30-35%のCPU使用率で動作しますので、この診断ツールを実行して気分を見つけました。

私はこれを得て、私が見ているものが正しいと確信する必要があります。

Task.StartNew機能が5回実行されたことが原因で、このCPU使用率が高くなっています。私はいくつかの関数呼び出しで「スタックトレース」と思われるものを見つけ赤でハイライト表示深く見た後

を更新

、私は感じて赤は、これらの機能が高いCPUを引き起こし、これらの機能は、に見える意味していますEWS Managed APIコードを使用している必要があります。

Analysis Report

enter image description here

+1

を設定することにより、出口にそれを伝えるまで、スリープ状態にスレッドを配置するには

 _CancelSignal = New AutoResetEvent(False) _CancelSignal.WaitOne() 

を使用しました。高いCPU使用率が期待できるように、データ同期が完了すると終了します。 ILSpyなどのツールを使用する方法が分かっている場合は、関連する方法を逆コンパイルしてより多くの洞察を得ることができます。 –

答えて

0

私は、コードのCPUを食べるピースを見つけました。

私はガベージコレクションからそれを保つ必要があったので、私はTastの中に無限のwhileループを持っていました。

 While Not pToken.IsCancellationRequested 
      If pToken.IsCancellationRequested Then Return 
     End While 

このため、CPU使用率が常に38%上昇しました。

はので、代わりに私は、コールスタックの最上位は、データを同期交換作業です_CancelSignsal

+1

この動作を再作成するには、本当に 'ManualResetEvent'を使用するべきです。自動イベントは、1つの事を通過させた後で自動的にリセットされます。あなたの古いコードは、取り消しが要求されたときに複数のことを可能にします –

関連する問題