BlockingCollection
の.NET 4.0
で実装されている「シングルプロデューサ/シングルコンシューマ」シナリオがあります。コレクションがSystem.Collections.Concurrent.BlockingCollectionを使用して容量の半分に達するまでプロデューサをブロックします
問題は、プロデューサスレッドが、コレクション内に1つの空きスペースが空いているとすぐに目を覚ますことです。私は消費者がコレクションアイテムの少なくとも半分を消費するまで、プロデューサーをブロックしたい。これは、プロデューサの速度が速く、生産がシステムにとって高価であるためです。
プロデューサのブロック条件を制御するにはどうすればよいですか?
なぜ「BoundedCapacity」があるのですか?彼らはフレームワークで2とハードコードすることができます。このアイデアは機能しますが、これは問題をシフトさせており、そのようなコードは維持するのが難しいです(リストサイズの変更を考慮してください) – Xaqron
@Xaqron Boundingは全体的なスロットリングに役立ち、またメモリの問題を引き起こす速い生産を防ぎます。状況。リストセマンティクスをアプリケーションに適合させるのがどれほど難しいかについて私はコメントすることはできませんが、全体的なテクニックとしてはあまり問題にはならないと感じています。キューに入れる前に結果を収集し、デキュー時に結果を列挙するだけです。私は生産と消費がバランスのとれていないので、データの半分で必ずしも正確に均衡するとは限りません。 –