SynchronizedCollection<T>
とSystem.Collections.Concurrent
名前空間の並行コレクションは、並行コレクションが名前空間であり、SynchronizedCollection<T>
がクラスであることを除いて、どのように異なるのですか?
SynchronizedCollection<T>
およびConcurrent Collectionsのすべてのクラスは、スレッドセーフなコレクションを提供します。どちらをいつ使用するかをどのように決定しますか、そしてそれはなぜですか?
SynchronizedCollection<T>
クラスは、スレッドセーフなコレクションクラスを提供するために.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
名前空間 で提供されるさまざまなタイプのコレクションから選択するのと同じように、特定のニーズに最適な機能と特性を持つコレクションを選択する必要があります。
古いバージョンの.NET Frameworkを対象にしている場合、またはIList<T>
インターフェイスを実装するコレクションクラスが必要な場合は、SynchronizedCollection<T>
クラスを選択する必要があります。
MSDNに関するこの記事も一読の価値があります。 スレッドセーフコレクションを使用する場合