Qual è la differenza tra SynchronizedCollection e le altre raccolte concorrenti?

In che modo SynchronizedCollection e le raccolte simultanee nello spazio System.Collections.Concurrent nomi System.Collections.Concurrent differiscono l’una dall’altra, a parte le raccolte simultanee come spazio dei nomi e SynchronizedCollection come class?

SynchronizedCollection e tutte le classi in Concurrent Collections forniscono collezioni thread-safe. Come decido quando utilizzarne uno e perché?

La class SynchronizedCollection stata introdotta per la prima volta in .NET 2.0 per fornire una class di raccolta thread-safe. Lo fa tramite il blocco in modo tale da avere essenzialmente un List cui ogni accesso è racchiuso in un’istruzione di lock .

Lo spazio System.Collections.Concurrent 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 class che implementa l’interfaccia IList è notevolmente assente tra queste opzioni.

Pertanto, se scegli come target la versione 4.0 di .NET Framework, dovresti utilizzare una delle raccolte fornite dallo spazio System.Collections.Concurrent nomi System.Collections.Concurrent quando ansible. Proprio come con la scelta tra i vari tipi di collezioni fornite nello spazio System.Collections.Generic nomi System.Collections.Generic , dovrai scegliere quello le cui caratteristiche e caratteristiche si adattano meglio alle tue esigenze specifiche.

Se hai come target una versione precedente di .NET Framework o hai bisogno di una class di raccolta che implementa l’interfaccia IList , dovrai scegliere la class SynchronizedCollection .

Questo articolo su MSDN vale anche una lettura: quando utilizzare una raccolta thread-safe