64

除了 Concurrent Collections 是命名空间和类之外,命名空间中SynchronizedCollection<T>的并发集合有何不同?System.Collections.ConcurrentSynchronizedCollection<T>

SynchronizedCollection<T>Concurrent Collections 中的所有类都提供线程安全的集合。我如何决定何时使用其中一种,为什么?

4

1 回答 1

74

该类首先在 .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

于 2011-01-11T07:35:06.420 回答