.NET Framework 1.0 įdiegtus rinkinius galima rasti System.Collections vardų srityje. Šie rinkiniai, įskaitant dažniausiai naudojamus ArrayList ir Hashtable, užtikrina tam tikrą gijų saugą per ypatybę Sinchronizuota, kuri pateikia su rinkiniu susijusį gijos saugų apvalkalą. Įvyniojimas veikia užrakindamas visą rinkinį kiekvienai pridėjimo ar pašalinimo operacijai. Todėl kiekvienas siūlas, bandantis patekti į kolekciją, turi palaukti, kol ateis jo eilė įsigyti spyną. Tai nėra keičiamo dydžio ir labai pablogins didelių kolekcijų našumą. Be to, šis dizainas visiškai neužkerta kelio ginčams. Daugiau informacijos rasite šiame MSDN svetainės puslapyje: Sinchronizavimas bendruosiuose rinkiniuose
.NET Framework 2.0 įvestą rinkinio klasę galima rasti System.Collections.Generic vardų srityje. Šios kolekcijos klasės apima sąrašą<T>, žodyną< TKey, TValue> ir kt. Šios klasės užtikrina aukštesnio tipo saugą ir našumą, palyginti su .NET Framework 1.0 klasėmis. Tačiau .NET Framework 2.0 rinkinio klasė neteikia jokio gijų sinchronizavimo; Vienu metu pridedant arba šalinant elementus keliose gijose, vartotojo kodas turi užtikrinti visą sinchronizavimą.
Rekomenduojame naudoti lygiagrečias rinkimo klases .NET Framework 4, nes jos užtikrina ne tik .NET Framework 2.0 rinkinio klasių tipo saugą, bet ir efektyvesnę bei išsamesnę gijų saugą nei .NET Framework 1.0 rinkinio teikiama gijų sauga.
Kai kurie vienalaikiai rinkimo tipai naudoja lengvus sinchronizavimo mechanizmus, tokius kaip SpinLock, SpinWait, SemaphoreSlim ir CountdownEvent, kurie yra nauji .NET Framework 4. Paprastai aukščiau nurodyti sinchronizavimo tipai trumpą laiką naudoja "užimtą sukimąsi" prieš perkeliant giją į tikrąją laukimo būseną. Jei tikimasi, kad laukimo laikas bus labai trumpas, sukimas sunaudos daug mažiau skaičiavimo išteklių nei laukimas, kuris apima branduolio konversijas, kurios sunaudos daug išteklių. Rinkimo klasėse, kuriose naudojamas sukimasis, šis efektyvumas reiškia, kad kelios gijos gali labai greitai pridėti ir pašalinti elementus. Daugiau informacijos apie ribojimą ir blokavimą rasite SpinLock ir SpinWait. ConcurrentQueue<T> ir ConcurrentStack<T> klasės visiškai nenaudoja užraktų. Vietoj to, jie pasikliauja blokavimo operacijomis sriegių saugumui.
Iliustruoti
Kadangi lygiagrečios rinkinio klasės palaiko ICollection, jos teikia IsSynchronized ir SyncRoot ypatybių diegimą, net jei jos nėra susijusios. IsSynchronized visada grąžina klaidingą, o SyncRoot visada yra nulinis (Visual Basic nieko).
Šioje lentelėje pateikiami rinkinių tipai System.Collections.Concurrent vardų srityje.
rūšis | apibūdinimas | Blokavimo kolekcija<T> | Teikia<T> bet kokio tipo droselį ir blokavimą IProducerConsumerCollection įgyvendinimui. Daugiau informacijos rasite BlockingCollection apžvalga. | ConcurrentDictionary<TKey, TValue> | Raktas/reikšmė yra saugus žodyno įgyvendinimas. | ConcurrentQueue<T> | FIFO (first in, first out) eilių gijų saugos įgyvendinimas. | ConcurrentStack<T> | Saugus LIFO (paskutinis, pirmas-išėjęs) rietuvių diegimas. | ConcurrentBag<T> | Saugus netinkamo elementų rinkinio įgyvendinimas. | IProducerConsumerCollection<T> | tipai turi būti įdiegtiBlokavimo kolekcijasąsajos, naudojamos
|
|