Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 69126|Vastaus: 4

[Lähde] .NET/C# Thread Safety Collection (vertailu)

[Kopioi linkki]
Julkaistu 6.6.2017 17.13.53 | | |
.NET Framework 1.0:ssa esitellyt kokoelmat löytyvät System.Collections-nimiavaruudesta. Nämä kokoelmat, mukaan lukien yleisesti käytetty ArrayList ja Hashtable, tarjoavat jonkinlaisen säikeen turvan Synchronized-ominaisuuden kautta, joka palauttaa kokoelmaan liittyvän säiketurvallisen kääreen. Kääre toimii lukitsemalla koko setin jokaista lisäys- tai poistotoimintoa varten. Siksi jokaisen säikeen, joka yrittää päästä kokoelmaan, täytyy odottaa, kunnes on sen vuoro saada lukko. Tämä ei ole skaalautuvaa ja johtaa merkittävään suorituskyvyn heikkenemiseen suurissa kokoelmissa. Lisäksi tämä rakenne ei täysin estä kiistaa. Lisätietoja löytyy seuraavalta sivulta MSDN:n verkkosivuilta: Synkronointi yleiskokoelmissa

.NET Framework 2.0:ssa esitelty kokoelmaluokka löytyy System.Collections.Generic-nimiavaruudesta. Näihin kokoelmakursseihin kuuluvat List<T>, Sanakirja< TKey, TValue> jne. Nämä luokat tarjoavat korkeampaa tyyppiturvallisuutta ja suorituskykyä verrattuna .NET Framework 1.0 -luokat. .NET Framework 2.0 -kokoelmaluokka ei kuitenkaan tarjoa säikeiden synkronointia; Kun lisäät tai poistat kohteita useista säikeistä samanaikaisesti, käyttäjäkoodin on tarjottava kaikki synkronointi.

Suosittelemme käyttämään samanaikaisia kokoelmaluokkia .NET Framework 4:ssä, koska ne tarjoavat paitsi .NET Framework 2.0 -kokoelmaluokkien tyypin turvallisuuden, myös tehokkaamman ja täydellisemmän säikesuojan kuin .NET Framework 1.0 -kokoelman säiketurvallisuus.


Jotkut samanaikaiset kokoelmatyypit käyttävät kevyitä synkronointimekanismeja, kuten SpinLock, SpinWait, SemaphoreSlim ja CountdownEvent, jotka ovat uusia .NET Framework 4:ssä. Tyypillisesti yllä mainitut synkronointityypit käyttävät "kiireistä pyörimistä" lyhyen aikaa ennen kuin säie siirretään varsinaiseen odotustilaan. Jos odotusajan odotetaan olevan hyvin lyhyt, pyöritys kuluttaa paljon vähemmän laskentaresursseja kuin odotus, mikä sisältää ytimen muunnokset, jotka kuluttavat paljon resursseja. Kokoelmaluokissa, jotka käyttävät kiertoa, tämä tehokkuus tarkoittaa, että useat säikeet voivat lisätä ja poistaa esineitä erittäin nopeasti. Lisätietoja rajoittamisesta ja estämisestä löytyy SpinLockista ja SpinWaitista. ConcurrentQueue<T>- ja<T> ConcurrentStack-luokat eivät käytä lukkoja lainkaan. Sen sijaan ne luottavat lukittuihin toimintoihin säikeiden turvallisuuden varmistamiseksi.

havainnollistaa

Koska samanaikaiset kokoelmaluokat tukevat ICollectionia, ne tarjoavat toteutuksia IsSynchronized- ja SyncRoot-ominaisuuksille, vaikka ne olisivat toisistaan riippumattomia. IsSynchronized palauttaa aina epätosi, kun taas SyncRoot on aina null (Visual Basicissa ei mitään).

Seuraava taulukko listaa kokoelmatyypit System.Collections.Concurrent -nimiavaruudessa.



tyyppi
kuvaus
BlockingCollection<T>
Tarjoaa<T> kaikenlaista rajoitusta ja estettä IProducerConsumerCollectionin toteuttamiseen. Lisätietoja löytyy BlockingCollection-yleiskatsauksesta.
ConcurrentDictionary<TKey, TValue>
Avain/arvo on sanakirjan säike-turvallinen toteutus.
ConcurrentQueue<T>
FIFO (first in, first out) -jonojen säikeiden turvallisuustoteutus.
ConcurrentStack<T>
LIFO (last-in, first-out) -pinojen säikeäturvallinen toteutus.
ConcurrentBag<T>
Säikeiden turvallinen toteutus epäjärjestyksessä olevasta elementtikokoelmasta.
IProducerConsumerCollection<T>
tyypit on toteutettavaBlockingCollectionRajapinnat, joita käytetään







Edellinen:.net/c# itextsharp PDF-koodin tuottamiseen
Seuraava:Install-Package: "MvvmLightLibs" on jo määritellyt riippuvuuden "CommonServiceLocatorille"...
Julkaistu 8.11.2017 15.24.45 |
Kyllä, opin
 Vuokraisäntä| Julkaistu 8.2.2021 10.00.41 |
Lista on<T> säikeiden turvallinen, jos listaa ei muuteta lainkaan iteroinnin aikana.
 Vuokraisäntä| Julkaistu 23.3.2021 11.32.46 |
ConcurrentDictionary tukee uusia ja päivitettyjä päivityksiä
https://www.itsvse.com/thread-2955-1-1.html

 Vuokraisäntä| Julkaistu 24.6.2023 14.20.57 |
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com