SynchronizedCollection <T>和其他并发集合有什么区别?
SynchronizedCollection<T>
和System.Collections.Concurrent
命名空间中的并发集合是如何不同的,除了Concurrent Collections是命名空间, SynchronizedCollection<T>
是类?
SynchronizedCollection<T>
和并发集合中的所有类都提供了线程安全的集合。 我该如何决定何时使用一个,为什么?
在.NET 2.0中首先引入了SynchronizedCollection<T>
类,以提供线程安全的集合类。 它通过locking来实现这个function,这样你就可以拥有一个List<T>
,每个访问都被封装在一个lock
语句中。
System.Collections.Concurrent
命名空间更新。 直到.NET 4.0才被引入,它包含了大幅改进和更多元化的select。 这些类不再使用锁来提供线程安全性,这意味着它们应该在multithreading同时访问数据的情况下更好地扩展。 然而,实现IList<T>
接口的类在这些选项中显然不存在。
因此,如果您的目标版本是.NET Framework 4.0,则应尽可能使用System.Collections.Concurrent
命名空间提供的其中一个集合。 就像在System.Collections.Generic
命名空间中提供的各种types的集合之间进行select一样,您需要select最适合您的特定需求的特性和特性。
如果您的目标是早期版本的.NET Framework或需要实现IList<T>
接口的集合类,则必须selectSynchronizedCollection<T>
类。
MSDN上的这篇文章也值得一读: 何时使用线程安全集合