Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 69126|Atsakyti: 4

[Šaltinis] .NET/C# gijų saugos rinkinys (gretinimas)

[Kopijuoti nuorodą]
Paskelbta 2017-06-06 17:13:53 | | |
.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







Ankstesnis:.net/c# itextsharp generuoti PDF kodą
Kitą:Install-Package: "MvvmLightLibs" jau turi priklausomybę, apibrėžtą "CommonServiceLocator"...
Paskelbta 2017-11-08 15:24:45 |
Taip, aš išmokau
 Savininkas| Paskelbta 2021-02-08 10:00:41 |
Sąrašas yra<T> saugus, jei iteracijos metu sąrašas visiškai nemodifikuojamas.
 Savininkas| Paskelbta 2021-03-23 11:32:46 |
ConcurrentDictionary palaiko naujus ir atnaujintus naujinimus
https://www.itsvse.com/thread-2955-1-1.html

 Savininkas| Paskelbta 2023-06-24 14:20:57 |
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com