See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 58026|Vastuse: 2

[Allikas] ConcurrentDictionary toetab uusi ja uuendatud uuendusi

[Kopeeri link]
Postitatud 13.07.2016 11:12:05 | | |
Arenduskeskkond: .NET 4.0 või uuem

Märkus:
System.Collections.Concurrent nimeruum .NET raamistikus 4.
Nagu MSDN dokumentatsioonis, rakendab ConcurrentDictionary lõimekindlat kogu, millele pääseb ligi mitme lõime kaudu korraga.
ConcurrentDictionary rakendab IDictionary<TKey, TValue> ning sellel on mõned unikaalsed mehhanismid võtme/väärtuse lisamiseks, uuendamiseks. (Allpool on selgitus, millal ja millist meetodit kasutada)

Stsenaarium 1: Lisa uus üksus ainult siis, kui võtit sõnaraamatus ei eksisteeri...
Kasuta TryAdd. TryAdd aktsepteerib võtme ja lisaväärtuse sõnastikku, tagastab fasle, kui võtit sõnastikust ei eksisteeri; Tagastab tõe, kui see on olemas.
public bool TryAdd(TKey võti, TValue väärtus)

Olukord 2: Uuenda olemasolevat võtit sõnastiku Value...
Kasuta TryUpdate'i. Kui sõnastikul on see võti ja see annab tingimusliku uuenduse, peaks see meetodis andma võrdlusväärtuse, mida saab uuendada, kui praegune väärtus on võrdne võrdlusväärtusega (TValue võrdlusväärtus).
public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)


Olukord 3: Sõnastikule tuleb lisada võti/väärtus; Kui võti pole kindel, kas see sõnaraamatus eksisteerib; Kui see eksisteerib, uuenda Kui seda ei ole, lisa see...

Kasuta AddOrUpdate'i. AddOrUpdate'il on kaks ülekoormust ja need kaks ülekoormust tagastavad väärtuse väärtuse:
Esimene ülekoormatud parameeter on AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Parameetrid on Key ja kaks delegaati; Esimese delegaadi eesmärk on delegeerida, kui võtit ei eksisteeri, ja tagastada väärtus (algväärtus). See delegeerimine Func tagastab < algväärtuse, võtme>.
Teine delegaat Func < tagastab Value, key, oldValue> ja täidab esimese delegaadi, kui võtit sõnaraamatus ei eksisteeri (kui see eksisteerib, siis seda ei käivitata; Eesmärk on anda väärtusele algväärtus), ja seejärel tagastatakse väärtus (väärtuse algväärtus); Teine delegeerimine on meetod väärtuse muutmiseks, mis nõuab samuti tagastusväärtust (algväärtuse muutmist lõppväärtuseks). Func < tagastada > Väärtus, võti, oldValue
public TValue AddOrUpdate (TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. Teise ülekoormuse parameeter on AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Esimene parameeter on võtmetähtsusega, teine siis, kui võtit ei eksisteeri, see väärtus on väärtuse algväärtus ja kolmas on delegeeritud muudatuse täitmiseks (Func< tagastab Value, key, oldValue>).
                      public TValue AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)

Olukord 4: Lisa võtme väärtus sõnaraamatusse, kuid kui võti juba eksisteerib, võta väärtus välja; Vastasel juhul lisatakse see
Esimene ülekoormus: GetOrAdd (TKEY, Func<TKey, TValue>valueFactory)
Esimene parameeter on võti, teine parameeter on delegeeritud funkt<väärtus, võti>, kui võtit ei eksisteeri, antakse muutuja võtmeks ja väärtus muudetakse. ja loo võti ja väärtus, tagastades väärtusväärtuse.

       2. Teine ülekoormus: GetOrAdd (TKEY, TValue)
Esimene parameeter on võtmetähtsusega ja teise parameetri eesmärk on luua võtme poolt antud uus väärtus, kui seda tegelikult ei eksisteeri. Tagastab väärtuse.
public TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
public TValue GetOrAdd(TKEY, TValue)


Iga AddOrUpdate'i ja GetOrAddi operatsioon on meetod, mida ConcurrentDictionary kasutab sõnastikku muutmiseks/kirjutamiseks, mis tagab lõime turvalisuse (see toimub lukustamata, lugedes andmeid sõnastikust).




Eelmine:LINQ mitmetingimuslik päring, kus tingimus konstrueeritakse
Järgmine:Windows allpool Memcachedi põhilisi operatsioonikäske
 Üürileandja| Postitatud 13.09.2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Allikas: Code Agriculture Network)
 Üürileandja| Postitatud 23.03.2021 11:32:18 |
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com