2017-02-15 17 views
-1

データベーステーブルに格納されたキューを持つWindowsサービスを実装しました。Windowsサービスキューがデータベースに格納されている場合のCPUが高い

私はMyQueueと呼ばれるテーブルがあり、このテーブルの各行はWindowsサービス用のタスクを指定しています。タスクが完了すると、このタスクが完了したことを意味する特別なフラグが行に表示されます。

while(true) 
{ 
    // get the first row from MyQueue that is not yet marked 

    // complete the task from the row 

    // mark the row as completed 
} 

このデザイン作品が、私はwhile(true)を使用するように、継続的に新たな行があるかどうかを確認するためにデータベースに要求を送信し、これはにCPU使用率が発生します。

私のWindowsサービスは、次のように動作します60%以上に上昇する。

データベーステーブルに格納されたキューを実装するためのより効果的な方法はありますか?

+2

MyQueueに何行追加していますか?あなたのサービスに警告することもできませんか? –

答えて

0

あなたは何のデータがキューに見つからなかったときに、現在のスレッドで(作業負荷ごとに)いくつかの睡眠を追加することにより、CPU使用率を制御することができますSqlTableDependency

0

を使用することができます。

while(true) 
{ 
    // get the first row from MyQueue that is not yet marked 
    if(MyQueue.Count == 0) 
    { 
     System.Threading.Thread.Sleep(TimeSpan.FromMilliseconds(1000)); 
      continue; 
    } 

    // complete the task from the row 

     // mark the row as completed 
} 
関連する問題