または、スレッドを使用して CPU の半分以上を使い果たすことなくアイテムを自由にデキューできるようにするには、BlockingCollection
どちらの正しい使用法でしょうか?ConcurrentQueue
2 つのスレッドを使用していくつかのテストを実行していましたが、少なくとも 50 ~ 100 ミリ秒の Thread.Sleep がない限り、常に CPU の少なくとも 50% を使用していました。
以下は架空の例です。
private void _DequeueItem()
{
object o = null;
while(socket.Connected)
{
while (!listOfQueueItems.IsEmpty)
{
if (listOfQueueItems.TryDequeue(out o))
{
// use the data
}
}
}
}
上記の例では、CPUが爆発しないようにthread.sleepを設定する必要があります。
注: IsEmpty チェックの while なしでも試してみましたが、結果は同じでした。