私は、いくつかの条件が真であることを確認するために無限にループするスレッドを生成する .NET アプリを作成しました。タスク マネージャーは、このスレッドが生成された瞬間に、スレッドが実行されている限り、アプリケーションが利用可能なほぼすべての CPU リソースを使用することを明らかにします。これがアプリケーションの存続期間です。
このスレッドが大量の CPU リソースを使用しないようにするにはどうすればよいでしょうか?
私は、いくつかの条件が真であることを確認するために無限にループするスレッドを生成する .NET アプリを作成しました。タスク マネージャーは、このスレッドが生成された瞬間に、スレッドが実行されている限り、アプリケーションが利用可能なほぼすべての CPU リソースを使用することを明らかにします。これがアプリケーションの存続期間です。
このスレッドが大量の CPU リソースを使用しないようにするにはどうすればよいでしょうか?
CPU の消費を防ぐ最善の方法は、目的の条件が真になるまで待機することです。ある種の同期プリミティブを使用して、スレッドを調整します。イベントは良いスタートになるでしょう。
他のスレッドからのデータを待つ必要がある場合は、モニターを使用してください: http://msdn.microsoft.com/de-de/library/system.threading.monitor%28v=vs.80%29.aspx
それが不可能な場合は、while ループ内にたとえば 10 ミリ秒のスリープを追加することを検討できます。これは役立つはずです。
while(true) {
//Do something here
Thread.Sleep(10); //Don't consume whole CPU
}
次の関連記事も参照してください: Thread.Sleep または Thread.Yield