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

Näkymä: 58026|Vastaus: 2

[Lähde] ConcurrentDictionary tukee uusia ja päivitettyjä päivityksiä

[Kopioi linkki]
Julkaistu 13.7.2016 11.12.05 | | |
Kehitysympäristö: .NET 4.0 tai uudempi

Huomautus:
System.Collections.Concurrent -nimiavaruus .NET Framework 4:ssä.
Kuten MSDN-dokumentaatiossa, ConcurrentDictionary toteuttaa säiketurvallisen kokoelman, johon useat säikeet voivat käyttää samanaikaisesti.
ConcurrentDictionary toteuttaa IDictionary<TKey, TValue>, ja sillä on ainutlaatuisia mekanismeja avaimen/arvon lisäämiseen ja päivittämiseen. (Alla on selitys siitä, milloin ja mitä menetelmää kannattaa käyttää)

Skenaario 1: Lisää uusi kohde vain, jos avainta ei ole sanakirjassa...
Käytä TryAddia. TryAdd hyväksyy avaimen ja lisäarvon sanakirjaan, palauttaa faslen, jos avainta ei ole sanakirjassa; Palautuu todeksi, jos läsnä on.
public bool TryAdd(TKey key, TValue value)

Tilanne 2: Päivitä olemassa oleva avain sanakirjan Value...
Käytä TryUpdatea. Jos sanakirjassa on tämä avain ja se antaa ehdollisen päivityksen, sen tulisi antaa tässä menetelmässä vertailuarvo, joka voidaan päivittää, kun nykyinen arvo vastaa vertailuarvoa (TValue comparisonValue).
public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)


Tilanne 3: Sanakirjaan täytyy lisätä avain/arvo; Jos avain ei ole varma, onko se olemassa sanakirjassa; Jos se on olemassa, päivitä. Jos sitä ei ole, lisää se...

Käytä AddOrUpdatea. AddOrUpdatessa on kaksi ylikuormitusta, ja nämä kaksi ylikuormitusta palauttavat arvon arvon:
Ensimmäinen ylikuormitettu parametri on AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Kriteerit ovat Key ja kaksi edustajaa; Ensimmäisen delegaatin tarkoitus on delegoida, kun avainta ei ole, ja palauttaa arvo (alkuarvo). Tämä delegointifunktio palauttaa < alkuarvon, avain>.
Toinen delegaatti Func < palauttaa Value, key, oldValue> ja suorittaa ensimmäisen delegaatin, jos avainta ei ole sanakirjassa (jos se on olemassa, sitä ei suoriteta; Tarkoituksena on antaa arvolle alkuperäinen arvo), ja sitten se palauttaa arvon (arvon alkuarvon); Toinen delegointi on menetelmä arvon muuttamiseen, joka vaatii myös palautusarvon (alkuperäisen arvon muuttamista lopulliseen arvoon). Func < palauttaa > Arvo, avain, oldValue
julkinen TValue AddOrUpdate (TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. Toisen ylikuormituksen parametri on AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Ensimmäinen parametri on avain, toinen on silloin kun avainta ei ole, tämä arvo on arvon alkuperäinen arvo, ja kolmas on delegoitu on muutos suoritettava (Func< palauttaa Value, key, oldValue>).
                      julkinen TValue AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)

Tilanne 4: Lisää avaimen arvo sanakirjaan, mutta jos avain on jo olemassa, poista arvo; Muuten se lisätään
Ensimmäinen ylikuormitus: GetOrAdd (TKEY, Func<TKey, TValue>valueFactory)
Ensimmäinen parametri on avain, toinen parametri delegoidaan Func<value, key>, kun avainta ei ole, muuttuja välitetään avaimena ja arvo muuttuu. ja luo avain ja arvo, palauttaen arvoarvon.

       2. Toinen ylikuormitus: GetOrAdd (TKEY, TValue)
Ensimmäinen parametri on avain, ja toisen parametrin tarkoitus on luoda avaimen antama uusi arvo, kun sitä ei ole olemassa. Palauttaa arvoa.
public TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
julkinen TValue GetOrAdd(TKEY, TValue)


Jokainen AddOrUpdate- ja GetOrAdd-toiminto on menetelmä, jonka ConcurrentDictionary käyttää sanakirjan muokkaamiseen/kirjoittamiseen, mikä takaa säikeen turvallisuuden (se tehdään lukittomalla tavalla, lukemalla dataa sanakirjasta).




Edellinen:LINQ-moniehdoinen kysely, jossa ehto rakennetaan
Seuraava:Windows Memcached-perusoperaatiokomentojen alapuolella
 Vuokraisäntä| Julkaistu 13.9.2016 13.33.25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Lähde: Code Agriculture Network)
 Vuokraisäntä| Julkaistu 23.3.2021 11.32.18 |
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