Ответ 1
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 также заслуживает внимания: Когда использовать сборку с потоками