2 Stimmen

Warum sollte ich meine Gegenstände in eine Tüte stecken wollen?

Ich habe gerade eine SO-Frage über die System.Collections.ConcurrentBag<T> Klasse, und ich habe die ViewBag Eigenschaft der Controller in ASP.NET MVC. Meiner Erfahrung nach habe ich gelernt, dass es einfacher ist, den Code anderer Leute zu verwenden, wenn man versteht, worauf sie beim Schreiben hinauswollten. Ich denke, es ist ziemlich intuitiv, was ein List<T> oder eine Dictionary<TKey,TValue> oder eine ReadOnlyCollection<T> darstellen sollen. A Bag ist hingegen nicht so intuitiv.

Meine Frage ist also: Was ist das? Bag Metapher darstellen soll, insbesondere in Bezug auf das .NET-Framework?

6voto

Jon Skeet Punkte 1325502

ConcurrentBag<T> ist eine thread-sichere, ungeordnete Folge von Elementen, die Duplikate enthalten kann.

Also im Vergleich zu einigen anderen Sammlungen:

  • Es ist ungeordnet, wie ein HashSet<T> aber im Gegensatz zu einer List<T>
  • Sie kann Duplikate enthalten, wie eine List<T> aber im Gegensatz zu einer HashSet<T>
  • Es handelt sich nur um Werte und nicht um eine Karte (im Gegensatz zu Dictionary<TKey, TValue> )
  • Sie ist thread-sicher, im Gegensatz zu allen nicht-konkurrierenden Sammlungen - so können Sie eine Instanz zwischen mehreren Threads teilen, die alle lesen und schreiben.

Mögliche Verwendungszwecke sind ein Arbeitsvorrat, bei dem die Reihenfolge keine Rolle spielt (sonst würde man ConcurrentQueue / ConcurrentStack ) oder eine Liste von Elementen, bei der Sie immer eine Sortierreihenfolge anwenden, nachdem Sie die Daten in eine andere "lokale" Sammlung geholt haben.

0voto

Dan Puzey Punkte 32863

Aus der ersten Zeile der MSDN-Dokumentation:

Stellt eine thread-sichere, ungeordnete Sammlung von Objekten dar.

Ich denke nicht, dass das weniger intuitiv ist als "List" oder "ReadOnlyCollection", wirklich - YMMV.

0voto

Emad Omara Punkte 492

ConcurrentBag ist dasselbe wie ConcurrentStack und ConcurrentQueue, mit der Ausnahme, dass es die Reihenfolge aus Leistungsgründen nicht beibehält, dieser Artikel erklärt es genauer http://www.emadomara.com/2011/08/what-is-concurrentbag.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X