除了 Concurrent Collections 是命名空间和类之外,命名空间中SynchronizedCollection<T>
的并发集合有何不同?System.Collections.Concurrent
SynchronizedCollection<T>
SynchronizedCollection<T>
Concurrent Collections 中的所有类都提供线程安全的集合。我如何决定何时使用其中一种,为什么?
除了 Concurrent Collections 是命名空间和类之外,命名空间中SynchronizedCollection<T>
的并发集合有何不同?System.Collections.Concurrent
SynchronizedCollection<T>
SynchronizedCollection<T>
Concurrent Collections 中的所有类都提供线程安全的集合。我如何决定何时使用其中一种,为什么?
该类首先在 .NET 2.0 中引入,以提供线程安全的集合类。它通过锁定来做到这一点,因此您基本上可以将每个访问都包含在一个语句中。SynchronizedCollection<T>
List<T>
lock
命名空间要新System.Collections.Concurrent
得多。直到 .NET 4.0 才引入它,它包括一组经过显着改进和更多样化的选择。这些类不再使用锁来提供线程安全,这意味着它们应该在多个线程同时访问其数据的情况下更好地扩展。但是,IList<T>
这些选项中明显没有实现该接口的类。
因此,如果您的目标是 .NET Framework 4.0 版,则应尽可能使用System.Collections.Concurrent
命名空间提供的集合之一。System.Collections.Generic
就像在命名空间中提供的各种类型的集合之间进行选择一样,您需要选择其特性和特性最适合您的特定需求的集合。
如果您的目标是较旧版本的 .NET Framework 或需要实现IList<T>
接口的集合类,则必须选择SynchronizedCollection<T>
该类。
MSDN 上的这篇文章也值得一读:When to Use a Thread-Safe Collection