2017-02-15 3 views
-1

Я реализовал службу Windows с очередью, которая хранится в таблице базы данных.Высокий CPU, когда очередь обслуживания Windows хранится в базе данных

У меня есть таблица под названием MyQueue, и каждая строка этой таблицы задает задачу для службы Windows. Когда задача завершена, строка помечена специальным флагом, что означает, что эта задача выполнена.

служба

My 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) он постоянно отправляет запросы в базу данных, чтобы проверить, есть ли какие-либо новые строки, и это вызывает использование процессора для выше 60%.

Есть ли более эффективный способ реализации очереди, хранящейся в таблице базы данных?

+2

Что добавляет строки в MyQueue? Можете ли вы также предупредить о своем обслуживании? –

ответ

0

Вы можете использовать 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 
} 
Смежные вопросы