Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 69126|Risposta: 4

[Fonte] Collezione di sicurezza filettatura .NET/C# (collazione)

[Copiato link]
Pubblicato su 06/06/2017 17:13:53 | | |
Le collezioni introdotte nel .NET Framework 1.0 si trovano nello spazio nominale System.Collections. Queste collezioni, inclusi i comunemente usati ArrayList e Hashtable, forniscono una sorta di sicurezza dei thread tramite la proprietà Synchronized, che restituisce un wrapper thread-safe correlato alla collezione. Il wrapper funziona bloccando l'intero set per ogni operazione di aggiunta o rimozione. Pertanto, ogni thread che cerca di accedere alla collezione deve aspettare il suo turno per acquisire il lock. Questo non è scalabile e comporterà un significativo degrado delle prestazioni per collezioni di grandi dimensioni. Inoltre, questo design non impedisce completamente la contesa. Per ulteriori informazioni, consulta la seguente pagina sul sito MSDN: Sincronizzazione nelle collezioni generiche

La classe di raccolta introdotta nel .NET Framework 2.0 si trova nello spazio nominale System.Collections.Generic. Queste classi di raccolta includono Lista<T>, Dizionario< TKey, TValue> ecc. Queste classi offrono una maggiore sicurezza dei tipi e prestazioni rispetto alle classi di .NET Framework 1.0. Tuttavia, la classe di raccolta .NET Framework 2.0 non fornisce alcuna sincronizzazione dei thread; Quando si aggiungono o si rimuovono elementi su più thread contemporaneamente, il codice utente deve fornire tutta la sincronizzazione.

Raccomandiamo di utilizzare classi di raccolta concorrente in .NET Framework 4 perché offrono non solo la sicurezza dei tipi delle classi di raccolta di .NET Framework 2.0, ma anche una sicurezza dei thread più efficiente e completa rispetto a quella fornita dalla collezione .NET Framework 1.0.


Alcuni tipi di collezione concorrente utilizzano meccanismi di sincronizzazione leggeri come SpinLock, SpinWait, SemaphoreSlim e CountdownEvent, che sono nuovi nel .NET Framework 4. Tipicamente, i tipi di sincronizzazione sopra elencati utilizzano la "rotazione occupata" per un breve periodo di tempo prima di mettere il thread nello stato effettivamente in attesa. Se il tempo di attesa è previsto molto breve, lo spin consumerà molte meno risorse di calcolo rispetto all'attesa, il che comporta conversioni di kernel che consumeranno molte risorse. Per le classi di collezione che utilizzano la rotazione, questa efficienza significa che più thread possono aggiungere e rimuovere elementi a un ritmo molto veloce. Per maggiori informazioni su limitazione e blocco, vedi SpinLock e SpinWait. Le<T> classi ConcurrentQueue e ConcurrentStack<T> non usano affatto i lock. Invece, si affidano a operazioni Interlock per la sicurezza dei thread.

illustrare

Poiché le classi di raccolta concorrenti supportano ICollection, forniscono implementazioni per le proprietà IsSynchronized e SyncRoot, anche se non correlate. IsSynchronized restituisce sempre false parole, mentre SyncRoot è sempre nullo (nulla in Visual Basic).

La tabella seguente elenca i tipi di collezione nello spazio di nomi System.Collections.Concurrent.



digitare
descrizione
BlockingCollection<T>
Fornisce<T> qualsiasi tipo di limitazione e blocco per l'implementazione di IProducerConsumerCollection. Per maggiori informazioni, vedi panoramica di BlockingCollection.
DizionarioConcurrente<TKey, TValue>
Key/value è un'implementazione thread-safe del dizionario.
ConcurrentQueue<T>
Implementazione della sicurezza dei thread nelle code FIFO (first in, first out).
ConcurrentStack<T>
Implementazione thread-safe degli stack LIFO (last-in, first-out).
ConcurrentBag<T>
Implementazione thread-safe di una collezione di elementi fuori ordine.
IProducerConsumerCollection<T>
i tipi devono essere implementati inBlockingCollectionInterfacce utilizzate nel







Precedente:.net/c# itextsharp per generare codice PDF
Prossimo:Install-Package: "MvvmLightLibs" ha già una dipendenza definita per "CommonServiceLocator"...
Pubblicato su 08/11/2017 15:24:45 |
Sì, ho imparato
 Padrone di casa| Pubblicato su 08/02/2021 10:00:41 |
La lista è<T> thread-safe se non viene modificata durante l'iterazione.
 Padrone di casa| Pubblicato su 23/03/2021 11:32:46 |
ConcurrentDictionary supporta aggiornamenti nuovi e aggiornati
https://www.itsvse.com/thread-2955-1-1.html

 Padrone di casa| Pubblicato su 24/06/2023 14:20:57 |
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com