なぜオブジェクトをバッグに入れたいのですか?
-
28-10-2019 - |
質問
私はちょうどそのような質問を見ました System.Collections.ConcurrentBag<T>
クラス、そして私は見ました ViewBag
のプロパティ Controller
ASP.NET MVCで。私の経験では、彼らがそれを書くことで何を得ているかを正確に理解していれば、人々のコードを使いやすいことを学びました。私は何についてかなり直感的だと思います List<T>
またはa Dictionary<TKey,TValue>
またはa ReadOnlyCollection<T>
表現することを意図しています。 a Bag
一方、それほど直感的ではありません。
だから、私の質問は次のとおりです。 これは何ですか Bag
特に.NETフレームワークに関しては、表現することを意図していますか?
解決
ConcurrentBag<T>
重複を含むアイテムのスレッドセーフ、順序付けられていないシーケンスです。
したがって、他のいくつかのコレクションと比較して:
- それは並べ替えられていません
HashSet<T>
しかし、aとは異なりますList<T>
- aのように複製を含めることができます
List<T>
しかし、aとは異なりますHashSet<T>
- マップではなく値だけです(とは異なります
Dictionary<TKey, TValue>
) - すべての非伝統コレクションとは異なり、それはスレッドセーフです。したがって、複数のスレッド間、すべての読み取りと書き込みの間でインスタンスを共有できます。
可能な用途には、注文を気にしない作業キューが含まれます(そうでなければ使用する場合 ConcurrentQueue
/ ConcurrentStack
)または、データを別の「ローカル」コレクションに取得した後、常にソートオーダーを適用するアイテムのリスト。
他のヒント
MSDNドキュメントの最初の行から:
オブジェクトのスレッドセーフ、順序付けられていないコレクションを表します。
「リスト」や「ReadOnlyCollection」よりも直感的ではないと思います。
concurrentBagは、パフォーマンス上の理由で注文を維持していないことを除いて、concurrentStackおよびconcurrentqueueと同じです。この記事では詳細について説明します。 http://www.emadomara.com/2011/08/what-is-concurrentbag.html