C# プログラムを開発していますが、CPU を大量に消費する関数が 1 つあります。これをコードで (外部アプリケーションではなく) 制御し、CPU 使用率を制限する方法を知りたいです。たとえば、CPU 使用率の 90% を使用している場合、アプリが遅くなっても 20% しか消費しないようにします。アプリ内から自動的に行う必要があります。クラスを提供する場合、それは素晴らしいことです。
6040 次
3 に答える
16
それができるかどうかはわかりませんが、実行中のスレッドのスレッド優先度をPriorityプロパティで変更できます。次のように設定します。
Thread.CurrentThread.Priority = ThreadPriority.Lowest;
また、私はあなたが本当にそれをキャップしたいとは思わない. マシンが他の方法でアイドル状態になっている場合は、タスクでビジー状態になりたいと思いますよね? ThreadPriority は、これをスケジューラに伝えるのに役立ちます。
于 2008-10-30T18:20:15.937 に答える
0
ループ内で Thread.Sleep(milliseconds) を呼び出すことにより、ループを遅くすることができます。これにより、CPU がスケジューラに戻されます。
しかし、「あまりにも多くの CPU を消費する」ということは、もっと根本的な問題を抱えているのではないかと考えさせられます。このスレッドはポーリングして何か他のものを待っていますか? その場合は、イベントまたはその他のカーネルベースのシグナル伝達メカニズムの使用を検討する必要があります。
于 2008-10-30T18:22:17.383 に答える
0
なんらかの OS API を照会して、消費している CPU の量を調べ、それ以降 (Thread.Sleep など) のスロットリングの決定を行う必要があると思います。
于 2008-10-31T01:00:38.327 に答える