2

System.Collections.ConcurrentBag<T>クラスに関するSOの質問を見たばかりで、ASP.NETMVCのViewBagプロパティを見ましたController。私の経験では、人々がコードを書く際に何をしているのかを正確に理解していれば、人々のコードを使用する方が簡単であることを学びました。List<T>aまたはaDictionary<TKey,TValue>またはaが何を表すのかについては、かなり直感的だと思いますReadOnlyCollection<T>。一方、 ABagはそれほど直感的ではありません。

だから、私の質問は次のとおりです。特に.NET Frameworkに関して、このメタファーは何を表すことを意味しますか?Bag

4

3 に答える 3

6

ConcurrentBag<T>は、重複を含む可能性のある、スレッドセーフで順序付けされていないアイテムのシーケンスです。

したがって、他のいくつかのコレクションと比較して:

  • のように順序付けられてHashSet<T>いませんが、List<T>
  • のように重複を含めることができますList<T>が、HashSet<T>
  • Dictionary<TKey, TValue>(とは異なり)マップではなく単なる値です
  • すべての非並行コレクションとは異なり、スレッドセーフであるため、すべての読み取りと書き込みを行う複数のスレッド間でインスタンスを共有できます。

考えられる用途には、順序を気にしないワークキュー(そうでなければConcurrentQueue/を使用するConcurrentStack)や、データを別の「ローカル」コレクションにフェッチした後に常に並べ替え順序を適用するアイテムのリストが含まれます。

于 2011-03-21T12:24:45.227 に答える
0

MSDNドキュメントの最初の行から:

スレッドセーフな、順序付けられていないオブジェクトのコレクションを表します。

これは「List」や「ReadOnlyCollection」よりも直感的ではないと思います。実際には、YMMVです。

于 2011-03-21T12:27:13.487 に答える
0

ConcurrentBagは、パフォーマンス上の理由で順序を維持しないことを除いて、ConcurrentStackおよびConcurrentQueueと同じです。この記事では、詳細について説明しますhttp://www.emadomara.com/2011/08/what-is-concurrentbag.html

于 2011-08-12T04:36:12.097 に答える