Il SynchronizedCollection<T>
class è stato introdotto per primo in .NET 2.0 per fornire una classe di raccolta thread-safe. Lo fa tramite il blocco in modo da avere essenzialmente un List<T>
in cui ogni accesso è racchiuso in un'istruzione lock
.
Lo spazio dei nomi System.Collections.Concurrent
è molto più recente. Non è stato introdotto fino a .NET 4.0 e include una serie di scelte sostanzialmente migliorata e più diversificata. Queste classi non usano più i lock per garantire la sicurezza dei thread, il che significa che dovrebbero scalare meglio in una situazione in cui più thread accedono ai loro dati contemporaneamente. Tuttavia, una classe che implementa l'interfaccia IList<T>
è in particolare assente tra queste opzioni.
Pertanto, se si desidera utilizzare la versione 4.0 di .NET Framework, è consigliabile utilizzare una delle raccolte fornite dallo spazio dei nomi System.Collections.Concurrent
quando possibile. Proprio come con la scelta tra i vari tipi di collezioni fornite nello System.Collections.Generic
namespace, dovrai scegliere quello le cui caratteristiche e caratteristiche si adattano meglio alle tue esigenze specifiche.
Se si sta prendendo di mira una versione precedente di .NET Framework o si richiede una classe di raccolta che implementa l'interfaccia IList<T>
, è necessario optare per la classe SynchronizedCollection<T>
.
Questo articolo su MSDN è anche la pena di leggere: When to Use a Thread-Safe Collection
fonte
2011-01-11 07:35:06
Date un'occhiata qui: http://stackoverflow.com/questions/1946520/why-are-there-no-concurrent-collections-in-c – StuartLC