8

セカンダリ スレッドを使用して大量の処理を実行する .NET winforms アプリケーションを作成しました。このアプリケーションは進行状況を UI スレッドに伝えます。すべてが正常に機能し、フォームに進行状況が表示されます。また、処理スレッドを中断するキャンセル ボタンも作成しました。ただし、時間のかかるプロセスがアプリケーションを実行していると、コンピューター全体の速度が低下します。ウィンドウをドラッグすると長い時間がかかり、メモ帳に文字を入力しようとするとかなりの遅延が発生します。

処理スレッドの優先度を下げるか、UI スレッドの優先度を上げる必要があると思います。これは正しいですか?現在、両方のスレッドの優先度は通常です。

次のように簡単ですか?それとも他にやるべきことがありますか?

Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;

優先順位を変更するにはどうすればよいですか? 処理の優先度を下げるか、UI の優先度を上げるか、またはその両方を行うべきですか? そして、どの設定に?正常以上か、それとも最高か?

4

4 に答える 4

5

スレッドの優先度があなたの問題であるとは必ずしも思いません(ただし、その一部である可能性があります)。この SO の質問を見てください: Background Worker Thread Priority

バックグラウンド スレッドのループが過度にタイトで、そのスレッドで CPU 時間を保持している可能性があります。残忍なもの (スレッドのスリープ) からより合理的なもの (ミューテックスとイベント) まで、いくつかの修正方法があります。

また、バックグラウンド スレッドのプロファイリングを (直接またはテスト ハーネスで) 試して、時間の大半を費やしている場所を確認し、非同期イベントまたは同様のオフロード手法を使用してこれを分離することもできます。

于 2010-02-09T19:38:43.303 に答える
2

バックグラウンド スレッドが全体としてシステムの応答性に影響を与えないようにしたい場合は、その優先度を下げる必要があります。ほとんどの場合、優先度をBelowNormalに設定します。

それ以外の場合は、現在見ているのと同じ効果があります。

そうは言っても、私は自分のコードでこれを行うのをためらっています。プログラムがより多くの処理コアを備えたシステムで実行されている場合、これは問題にならない可能性が高く、スレッドの優先度を下げると (潜在的に) アルゴリズムの処理に時間がかかります。

于 2010-02-09T19:38:35.710 に答える
0

通常、メイン スレッドの優先度はそのままにして、処理スレッドの優先度を Idle に下げます。

于 2010-02-09T19:38:07.470 に答える
0

通常、ワーカー スレッドの優先順位を適切なレベルに設定する必要があります (たとえば、ユーザーが別のアプリケーションで何かを実行したい場合でも、ワーカー スレッドは正常に動作する必要があります)。ただし、Windows は既に "アクティブな" プロセス スレッド (アプリケーション入力フォーカスのあるウィンドウがあります) 少し反応が良くなります。通常、時間の制約を満たす必要がある場合は、より高い優先度が必要になります。

于 2010-02-09T19:38:47.800 に答える