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