Coleções simultâneas comendo muita CPU sem Thread.Sleep
Qual seria o uso correto de ambos,BlockingCollection
ouConcurrentQueue
para que você possa desenfileirar livremente itens sem queimar metade ou mais da CPU usando um encadeamento?
Eu estava executando alguns testes usando 2 threads e, a menos que eu tivesse um Thread.Sleep de pelo menos 50 ~ 100ms, sempre atingia pelo menos 50% da minha CP
Aqui está um exemplo fictício:
private void _DequeueItem()
{
object o = null;
while(socket.Connected)
{
while (!listOfQueueItems.IsEmpty)
{
if (listOfQueueItems.TryDequeue(out o))
{
// use the data
}
}
}
}
Com o exemplo acima, eu teria que definir um thread.sleep para que a CPU não explodiss
Nota: Eu também tentei sem o tempo para a verificação IsEmpty, o resultado foi o mesm