質問
C#プログラムを開発していますが、CPUを大量に消費する関数が1つあります。これをコード(外部アプリケーションではなく)で制御し、CPU使用率を制限する方法を知りたいです。 たとえば、CPU使用率の90%を使用する場合、アプリが遅くなっても20%しか消費しないようにします。自動的に、アプリ内から実行する必要があります。 クラスを提供すれば、素晴らしいでしょう。
解決
それができるかどうかはわかりませんが、実行中のスレッドのスレッド優先度は Priority プロパティ。次の方法で設定します。
Thread.CurrentThread.Priority = ThreadPriority.Lowest;
また、あなたが本当にそれを制限したいとは思わない。マシンがアイドル状態の場合、タスクで忙しくなりますか? ThreadPriorityは、これをスケジューラに伝えるのに役立ちます。
他のヒント
ループ内でThread.Sleep(milliseconds)を呼び出すことにより、ループを遅くすることができます。これにより、CPUがスケジューラに戻されます。
しかし、「CPUを過度に消費している」ということは、もっと根本的な問題があるのではないかと思います。このスレッドはポーリングして他の何かを待っていますか?その場合は、イベントまたは他のカーネルベースのシグナリングメカニズムの使用を検討する必要があります。
CPUをどれだけ消費しているかを調べるために、ある種のOS APIにクエリを実行し、それからスロットリングの決定(Thread.Sleepなど)を行う必要があると思います。
所属していません StackOverflow