Каким будет правильное использование: 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, результат был таким же.