64

並行コレクションが名前空間であり、クラスであることを除けば、名前空間SynchronizedCollection<T>内の並行コレクションはどのようにSystem.Collections.Concurrent異なりますか?SynchronizedCollection<T>

SynchronizedCollection<T>また、Concurrent Collections のすべてのクラスは、スレッド セーフなコレクションを提供します。どちらをいつ使用するかを決定するにはどうすればよいですか? また、その理由は?

4

1 に答える 1

74

このクラスは、スレッド セーフなコレクション クラスを提供するために、.NET 2.0 で最初に導入されました。これはロックを介して行われるため、基本的にすべてのアクセスがステートメントでラップされます。SynchronizedCollection<T>List<T>lock

名前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 のこの記事も読む価値があります:スレッドセーフ コレクションを使用する場合

于 2011-01-11T07:35:06.420 に答える