41

SynchronizedCollection<T>System.Collections.Concurrent命名空間中的併發集合是如何相互區別的,除了Concurrent Collections是一個命名空間而SynchronizedCollection<T>是一個類?SynchronizedCollection <T>與其他併發集合之間有什麼區別?

SynchronizedCollection<T>並且併發集合中的所有類都提供線程安全集合。我該如何決定何時使用一個,爲什麼?

+1

看看這裏:http://stackoverflow.com/questions/1946520/why-are-there-no-concurrent-collections-in-c – StuartLC 2011-01-11 07:26:20

回答

50

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

+0

所以,我可以更喜歡System.Collections.Concurrent SynchrinozedCollecction ,因爲我使用的是4.0版本! – Batrickparry 2011-01-11 07:42:34

相關問題