0

.NET 環境で非メイン スレッドのプロセッサ時間の使用を減らす方法はありますか。スレッドは常に Web サーバーから情報を取得するために使用され、すべての 1 コア プロセッサ時間を消費します。Thread.Sleep() を使用できることはわかっていますが、このタスクの良い解決策とは思えません。

4

2 に答える 2

2

優先順位などをいじってもうまくいきません。システムに「やるべき仕事があるので、仕事をさせてください」と言っているスレッドが 1 つあり、他に競合するスレッドがない場合、ウィンドウはそのスレッドをスケジュールし続けます。

このスレッドが Web サーバーから情報を取得していることを示しています。おそらく、サーバーからの応答を待っている間は少なくともブロックしているので、その時点で CPU を使用していないことを願っています。残念ながら、情報をポーリングしているように聞こえるので、Thread.Sleep次のポーリング時期をスレッドに伝えることができる帯域外シグナルが他にない限り、ここで最適な場合があります。


スレッドが次にいつポーリングする必要があるかを Web サーバーが「認識」している場合は、そのような情報を応答に含めるように変更することができます。次に、応答からその情報を抽出し、少なくともSleep期間を適切な値に設定できます。

あるいは、別のスレッドが別の場所から新しい要求を発行する必要があることを示す情報を取得する場合は、 ではなくThread.Sleep、イベント (例: AutoResetEvent)を使用WaitOneし、そのシグナルで適切なスリープ期間を再度指定する必要があります。そうすれば、ポーリングが再び行われるべきだと考えるときはいつでも、他の何かがこの眠っているスレッドを目覚めさせることができます。

于 2011-07-08T06:48:52.977 に答える
0

バックグラウンドスレッドの優先度を変更できます

于 2011-07-08T06:25:22.623 に答える