Почему я хотел бы положить свои вещи в сумку?

Я только что увидел ТАК вопрос о System.Collections.ConcurrentBag<T> класс, и я видел ViewBag собственность Controller в ASP.NET MVC. Исходя из своего опыта, я понял, что легче использовать код людей, если вы понимаете, к чему именно они стремились при его написании. Я думаю, что это довольно интуитивно понятно, что List<T> или Dictionary<TKey,TValue> или ReadOnlyCollection<T> предназначены для представления. Bag с другой стороны, не так интуитивно понятно.

Итак, мой вопрос: что это Bag метафора предназначена для представления, особенно в отношении.NET Framework?

3 ответа

Решение

ConcurrentBag<T> это потокобезопасная, неупорядоченная последовательность элементов, которая может включать дубликаты.

По сравнению с некоторыми другими коллекциями:

  • Это неупорядочено, как HashSet<T> но в отличие от List<T>
  • Он может содержать дубликаты, такие как List<T> но в отличие от HashSet<T>
  • Это просто значения, а не карта (в отличие Dictionary<TKey, TValue>)
  • Он ориентирован на многопотоковое исполнение, в отличие от всех несовпадающих коллекций, поэтому вы можете делить экземпляр между несколькими потоками, для чтения и записи.

Возможное использование включает рабочую очередь, где вы не заботитесь о порядке (в противном случае вы бы использовали ConcurrentQueue / ConcurrentStack) или список элементов, к которым вы всегда будете применять порядок сортировки после извлечения данных в другую "локальную" коллекцию.

Из первой строки документации MSDN:

Представляет потокобезопасную неупорядоченную коллекцию объектов.

Я не думаю, что это менее интуитивно, чем "Список" или "ReadOnlyCollection", на самом деле - YMMV.

ConcurrentBag - это то же самое, что ConcurrentStack и ConcurrentQueue, за исключением того, что он не поддерживает порядок по соображениям производительности, в этой статье это объясняется более подробно http://www.emadomara.com/2011/08/what-is-concurrentbag.html

Другие вопросы по тегам