Класс SynchronizedCollection<T>
был впервые представлен в .NET 2.0 для обеспечения класса потоковобезопасного сбора. Он делает это с помощью блокировки, так что у вас есть List<T>
, где каждый доступ обернут в оператор lock
.
Пространство имен System.Collections.Concurrent
намного новее. Он не был представлен до .NET 4.0 и включает существенно улучшенный и более разнообразный набор вариантов. Эти классы больше не используют блокировки для обеспечения безопасности потоков, что означает, что они должны лучше масштабироваться в ситуации, когда несколько потоков одновременно получают доступ к своим данным. Однако класс, реализующий интерфейс IList<T>
, заметно отсутствует среди этих опций.
Итак, если вы ориентируетесь на версию 4.0 .NET Framework, вам следует по возможности использовать одну из коллекций, предоставляемых пространством имен System.Collections.Concurrent
. Так же, как и при выборе между различными типами коллекций, предоставленных в пространстве имен System.Collections.Generic
, вам нужно будет выбрать тот, функции и характеристики которого лучше всего соответствуют вашим конкретным потребностям.
Если вы ориентируетесь на старую версию .NET Framework или вам нужен класс коллекции, который реализует интерфейс IList<T>
, вам придется выбрать класс SynchronizedCollection<T>
.
Также стоит прочитать эту статью на MSDN: Когда использовать многопоточную коллекцию