Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 69126|Atbildi: 4

[Avots] .NET/C# pavedienu drošības kolekcija (salīdzināšana)

[Kopēt saiti]
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 kodu
Nākamo:Install-Package: "MvvmLightLibs" jau ir atkarība, kas definēta "CommonServiceLocator"...
Publicēts 08.11.2017 15:24:45 |
Jā, es iemācījos
 Saimnieks| Publicēts 08.02.2021 10:00:41 |
Saraksts ir<T> drošs pret pavedieniem, ja iterācijas laikā saraksts vispār netiek modificēts.
 Saimnieks| Publicēts 23.03.2021 11:32:46 |
ConcurrentDictionary atbalsta jaunus un atjauninātus atjauninājumus
https://www.itsvse.com/thread-2955-1-1.html

 Saimnieks| Publicēts 24.06.2023 14:20:57 |
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com