SynchronizedCollection<T>
和System.Collections.Concurrent
命名空間中的併發集合是如何相互區別的,除了Concurrent Collections是一個命名空間而SynchronizedCollection<T>
是一個類?SynchronizedCollection <T>與其他併發集合之間有什麼區別?
SynchronizedCollection<T>
並且併發集合中的所有類都提供線程安全集合。我該如何決定何時使用一個,爲什麼?
SynchronizedCollection<T>
和System.Collections.Concurrent
命名空間中的併發集合是如何相互區別的,除了Concurrent Collections是一個命名空間而SynchronizedCollection<T>
是一個類?SynchronizedCollection <T>與其他併發集合之間有什麼區別?
SynchronizedCollection<T>
並且併發集合中的所有類都提供線程安全集合。我該如何決定何時使用一個,爲什麼?
首先在.NET 2.0中引入了SynchronizedCollection<T>
class以提供線程安全的集合類。它通過鎖定來實現這一點,以便您基本上擁有一個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
所以,我可以更喜歡System.Collections.Concurrent SynchrinozedCollecction
看看這裏:http://stackoverflow.com/questions/1946520/why-are-there-no-concurrent-collections-in-c – StuartLC 2011-01-11 07:26:20