Колекциите, въведени в .NET Framework 1.0, могат да бъдат намерени в пространството на имената System.Collections. Тези колекции, включително често използваните ArrayList и Hashtable, осигуряват някаква защита на нишките чрез свойството Synchronized, което връща нишко-безопасна обвивка, свързана с колекцията. Обвивката работи, като заключва целия набор при всяка операция по добавяне или премахване. Затова всяка нишка, която се опитва да получи достъп до колекцията, трябва да изчака да дойде нейният ред да получи ключалката. Това не е мащабируемо и ще доведе до значително влошаване на производителността при големи колекции. Освен това този дизайн не предотвратява напълно споровете. За повече информация вижте следващата страница на уебсайта на MSDN: Синхронизация в общи колекции
Класът колекция, въведен в .NET Framework 2.0, може да се намери в пространството на имената System.Collections.Generic. Тези колекционни класове включват List<T>, Dictionary< TKey, TValue> и др. Тези класове осигуряват по-висока типова сигурност и производителност в сравнение с .NET Framework 1.0 класовете. Въпреки това, класът за колекция .NET Framework 2.0 не предоставя никаква синхронизация на нишки; При добавяне или премахване на елементи в няколко нишки едновременно, потребителският код трябва да осигури цялата синхронизация.
Препоръчваме да използвате паралелни класове за колекция в .NET Framework 4, тъй като те осигуряват не само типовата безопасност на класовете за колекция .NET Framework 2.0, но и по-ефективна и пълна сигурност на нишките в сравнение с колекцията .NET Framework 1.0.
Някои типове колекция с конкурентни колекции използват леки механизми за синхронизация като SpinLock, SpinWait, SemaphoreSlim и CountdownEvent, които са нови в .NET Framework 4. Обикновено горните типове синхронизация използват "заето въртене" за кратък период от време, преди да поставят нишката в действително състояние на изчакване. Ако се очаква времето за изчакване да е много кратко, спинът ще изразходва много по-малко изчислителни ресурси от чакането, което включва конверсии на ядрото, които ще изразходват много ресурси. За колекционни класове, които използват ротация, тази ефективност означава, че множество нишки могат да добавят и премахват елементи с много бърза скорост. За повече информация относно ограничаването и блокирането вижте SpinLock и SpinWait. <T> Класовете ConcurrentQueue и ConcurrentStack<T> изобщо не използват заключвания. Вместо това разчитат на взаимосвързани операции за безопасност на нишките.
илюстрирам
Тъй като паралелните класове на колекция поддържат ICollection, те предоставят реализации на свойствата IsSynchronized и SyncRoot, дори и да не са свързани. IsSynchronized винаги връща false, докато SyncRoot винаги е null (Нищо във Visual Basic).
Следващата таблица изброява типовете колекции в пространството на имената System.Collections.Concurrent.
вид | описание | BlockingCollection<T> | Осигурява<T> всякакъв вид ограничаване и блокиране за имплементиране на IProducerConsumerCollection. За повече информация вижте преглед на BlockingCollection. | ConcurrentDictionary<TKey, TValue> | Ключ/стойност е нито-безопасна реализация на речника. | ConcurrentQueue<T> | Имплементация на FIFO опашки за безопасност на нишките (първи влязъл, първи излез). | ConcurrentStack<T> | Нитко-безопасна имплементация на LIFO (последен влез, първи излязъл) стекове. | ConcurrentBag<T> | Нито-безопасна имплементация на колекция от елементи извън реда. | IProducerConsumerCollection<T> | Типовете трябва да бъдат имплементирани вBlockingCollectionИнтерфейси, използвани в
|
|