В чем разница между SynchronizedCollection <T>и другими одновременными коллекциями? - PullRequest
49 голосов
/ 11 января 2011

Чем SynchronizedCollection<T> и параллельные коллекции в пространстве имен System.Collections.Concurrent отличаются друг от друга, за исключением того, что параллельные коллекции являются пространством имен, а SynchronizedCollection<T> - классом?

SynchronizedCollection<T> и всеклассы в Concurrent Collections предоставляют поточно-ориентированные коллекции.Как мне решить, когда использовать один поверх другого и почему?

1 Ответ

58 голосов
/ 11 января 2011

Класс 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: Когда использовать многопоточную коллекцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...