Colecciones concurrentes comiendo demasiada CPU sin Thread.Sleep
¿Cuál sería el uso correcto de cualquiera,BlockingCollection
oConcurrentQueue
para que pueda retirar elementos libremente sin quemar la mitad o más de su CPU con un hilo?
Estaba ejecutando algunas pruebas con 2 hilos y, a menos que tuviera un Thread.Sleep de al menos 50 ~ 100 ms, siempre alcanzaría al menos el 50% de mi CPU.
Aquí hay un ejemplo ficticio:
private void _DequeueItem()
{
object o = null;
while(socket.Connected)
{
while (!listOfQueueItems.IsEmpty)
{
if (listOfQueueItems.TryDequeue(out o))
{
// use the data
}
}
}
}
Con el ejemplo anterior, tendría que configurar un thread.sleep para que la CPU no explote.
Nota: También lo he intentado sin tiempo para la verificación IsEmpty, el resultado fue el mismo.