Каким будет правильное использование BlockingCollection
или ConcurrentQueue
, чтобы вы могли свободно удалять элементы из очереди, не сжигая половину или более вашего процессора с использованием потока?
Я запускал несколько тестов с использованием 2 потоков, и если бы у меня не было Thread.Sleep не менее 50 ~ 100 мс, он всегда загружал бы не менее 50% моего процессора.
Вот вымышленный пример:
private void _DequeueItem()
{
object o = null;
while(socket.Connected)
{
while (!listOfQueueItems.IsEmpty)
{
if (listOfQueueItems.TryDequeue(out o))
{
// use the data
}
}
}
}
В приведенном выше примере мне пришлось бы установить thread.sleep, чтобы процессор не взорвался.
Примечание: я также пробовал это без проверки IsEmpty, результат был таким же.