web-dev-qa-db-ja.com

高速で最高のプロデューサー/コンシューマーキューテクニックBlockingCollection vs Concurrent Queue

C#3.0でGeneric.Queueを使用し、Monitor.Enter、wait、exitを使用して待機してからキューを消費します(要素がエンキューされるのを待ちます)。今、C#4に移行しています。

特にロックを回避するために、どれが高速で最適であるかを教えてください。

BlockingCollectionとconcurrentQueueまたは他の何か...

注意。プロデューサーを制限したくない

前もって感謝します..

38
C-va

BlockingCollection および ConcurrentQueue はまさにこの理由で存在します。私はあなたがより良いもの、またはより使いやすいものを見つけることを疑います。並列拡張チームは自分のものを知っています:)

ただし、バージョンを簡単に確認してください。C#4だけでなく、.NET 4を使用していますか。 (たとえば、Visual Studio 2010を使用しているため、C#4を使用できますが、.NET 3.5をターゲットにしている場合は、Parallel Extensionsを使用できません。)

また、 タスクベースの非同期パターンTPLデータフロー 、および C#5のasync/await機能 ...まだそれらを使用することはできませんが、何が来るかを知ることは害になりません。

110
Jon Skeet