SynchronizedCollection<T>
classは、.NET 2.0で最初に導入され、スレッドセーフなコレクションクラスを提供しました。これはロックによって行われ、基本的にすべてのアクセスがlock
ステートメントでラップされるList<T>
があります。
System.Collections.Concurrent
名前空間ははるかに新しいです。それは.NET 4.0まで導入されておらず、大幅に改善された多様な選択肢を含んでいます。これらのクラスは、スレッドセーフティを提供するためにロックを使用しなくなりました。つまり、複数のスレッドが同時にデータにアクセスしている状況で、スケーラビリティを向上させる必要があります。しかしながら、これらのオプションの中には、IList<T>
インタフェースを実装するクラスは特にありません。
.NET Frameworkのバージョン4.0を対象としている場合は、可能であればSystem.Collections.Concurrent
名前空間によって提供されるコレクションの1つを使用する必要があります。 System.Collections.Generic
namespaceで提供されているさまざまな種類のコレクションを選択する場合と同様に、特定のニーズに最適な機能と特性を持つものを選択する必要があります。
.NET Frameworkの古いバージョンをターゲットにする場合、またはIList<T>
インターフェイスを実装するコレクションクラスが必要な場合は、SynchronizedCollection<T>
クラスを選択する必要があります。
MSDNのこの記事も読む価値がある:When to Use a Thread-Safe Collection
はこちらをご覧:http://stackoverflow.com/questions/1946520/why-are-there-no-concurrent-collections-in-cを – StuartLC