web-dev-qa-db-fra.com

Quelle est la différence entre SynchronizedCollection <T> et les autres collections simultanées?

Comment SynchronizedCollection<T> et les collections simultanées dans le System.Collections.Concurrent l'espace de noms diffère les uns des autres, sauf que les collections simultanées sont un espace de noms et SynchronizedCollection<T> être une classe?

SynchronizedCollection<T> et toutes les classes des collections simultanées fournissent des collections thread-safe. Comment décider quand utiliser l'un par rapport à l'autre et pourquoi?

53
Batrickparry

La classe SynchronizedCollection<T> a été introduite en premier dans .NET 2.0 pour fournir une classe de collection thread-safe. Il le fait via le verrouillage afin que vous ayez essentiellement un List<T> Où chaque accès est encapsulé dans une instruction lock.

L'espace de noms System.Collections.Concurrent est beaucoup plus récent. Il n'a pas été introduit avant .NET 4.0 et il comprend un ensemble de choix considérablement amélioré et plus diversifié. Ces classes n'utilisent plus de verrous pour assurer la sécurité des threads, ce qui signifie qu'elles devraient mieux évoluer dans une situation où plusieurs threads accèdent simultanément à leurs données. Cependant, une classe implémentant l'interface IList<T> Est notamment absente parmi ces options.

Par conséquent, si vous ciblez la version 4.0 du .NET Framework, vous devez utiliser l'une des collections fournies par l'espace de noms System.Collections.Concurrent Dans la mesure du possible. Tout comme pour choisir entre les différents types de collections fournis dans l'espace de noms System.Collections.Generic , vous devrez choisir celui dont les caractéristiques et les caractéristiques correspondent le mieux à vos besoins spécifiques.

Si vous ciblez une ancienne version du .NET Framework ou avez besoin d'une classe de collection qui implémente l'interface IList<T>, Vous devrez opter pour la classe SynchronizedCollection<T>.

Cet article sur MSDN vaut également la peine d'être lu: Quand utiliser une collection Thread-Safe

58
Cody Gray