|
|
Publicēts 06.06.2017 17:13:53
|
|
|

.NET Framework 1.0 ieviestās kolekcijas ir atrodamas System.Collections nosaukumtelpā. Šīs kolekcijas, tostarp bieži izmantotais ArrayList un Hashtable, nodrošina zināmu pavedienu drošību, izmantojot rekvizītu Sinhronizēts, kas atgriež ar kolekciju saistītu pavedienu drošu iesaiņojumu. Iesaiņojums darbojas, bloķējot visu komplektu katrai pievienošanas vai noņemšanas operācijai. Tāpēc katram pavedienam, kas mēģina piekļūt kolekcijai, ir jāgaida, līdz pienāk viņa kārta iegūt slēdzeni. Tas nav mērogojams un radīs ievērojamu veiktspējas pasliktināšanos lielām kolekcijām. Turklāt šis dizains pilnībā nenovērš strīdus. Papildinformāciju skatiet šajā MSDN tīmekļa vietnes lapā: Sinhronizācija vispārējās kolekcijās
.NET Framework 2.0 ieviestā kolekcijas klase ir atrodama System.Collections.Generic nosaukumtelpā. Šīs kolekcijas klases ietver sarakstu<T>, vārdnīcu< TKey, TValu>e utt. Šīs klases nodrošina augstāku tipa drošību un veiktspēju salīdzinājumā ar .NET Framework 1.0 klasēm. Tomēr .NET Framework 2.0 kolekcijas klase nenodrošina pavedienu sinhronizāciju; Pievienojot vai noņemot vienumus vairākos pavedienos vienlaikus, lietotāja kodam ir jānodrošina visa sinhronizācija.
Ieteicams izmantot vienlaicīgas apkopošanas klases .NET Framework 4, jo tās nodrošina ne tikai .NET Framework 2.0 kolekcijas klašu tipa drošību, bet arī efektīvāku un pilnīgāku pavedienu drošību nekā .NET Framework 1.0 kolekcijas nodrošinātā pavedienu drošība.
Daži vienlaicīgas kolekcijas veidi izmanto vieglus sinhronizācijas mehānismus, piemēram, SpinLock, SpinWait, SemaphoreSlim un CountdownEvent, kas ir jauni .NET Framework 4. Parasti iepriekš minētie sinhronizācijas veidi īsu laiku izmanto "aizņemtu griešanu", pirms pavediens tiek ievietots faktiskajā gaidīšanas stāvoklī. Ja gaidīšanas laiks ir ļoti īss, griešanās patērēs daudz mazāk skaitļošanas resursu nekā gaidīšana, kas ietver kodola konvertēšanu, kas patērēs daudz resursu. Kolekcijas klasēm, kurās tiek izmantota rotācija, šī efektivitāte nozīmē, ka vairāki pavedieni var ļoti ātri pievienot un noņemt vienumus. Plašāku informāciju par ierobežošanu un bloķēšanu skatiet SpinLock un SpinWait. ConcurrentQueue<T> un ConcurrentStack<T> klasēs bloķēšanas vispār netiek izmantotas. Tā vietā viņi paļaujas uz bloķētām operācijām vītņu drošībai.
Ilustrētu
Tā kā vienlaicīgas kolekcijas klases atbalsta ICollection, tās nodrošina IsSynchronized un SyncRoot rekvizītu ieviešanu, pat ja tie nav saistīti. IsSynchronized vienmēr atgriež false, bet SyncRoot vienmēr ir nulle (Visual Basic nekas).
Tālāk esošajā tabulā ir uzskaitīti kolekciju tipi nosaukumtelpā System.Collections.Concurrent.
tips | apraksts | Bloķēšanas kolekcija<T> | Nodrošina<T> jebkāda veida ierobežošanu un bloķēšanu IProducerConsumerCollection ieviešanai. Papildinformāciju skatiet sadaļā BlockingCollection pārskats. | ConcurrentDictionary<TKey, TValue> | Atslēga/vērtība ir vārdnīcas droša ieviešana. | Vienlaicīga rinda<T> | FIFO (pirmais iekšā, pirmais ārā) rindu pavedienu drošības ieviešana. | ConcurrentStack<T> | LIFO (last-in, first-out) steku ieviešana ar pavedieniem. | Vienlaicīga soma<T> | Droša nepareizas elementu kolekcijas ieviešana. | IProducerConsumerCollection<T> | Veidi jāieviešBloķēšanas kolekcijasaskarnes, kas tiek izmantotas
|
|
Iepriekšējo:.net/c# itextsharp, lai ģenerētu PDF koduNākamo:Install-Package: "MvvmLightLibs" jau ir atkarība, kas definēta "CommonServiceLocator"...
|