この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 69126|答える: 4

[出典] .NET/C# スレッドセーフティコレクション(照合)

[リンクをコピー]
掲載地 2017/06/06 17:13:53 | | |
.NET Framework 1.0で導入されたコレクションはSystem.Collections名前空間で見つけることができます。 これらのコレクションは、一般的に使われるArrayListやHashtableを含め、Synchronizedプロパティを通じてスレッドの安全性を提供し、コレクションに関連するスレッドセーフラッパーを返します。 ラッパーは、追加または削除操作ごとにセット全体をロックすることで動作します。 したがって、コレクションにアクセスしようとする各スレッドは、自分の番が来るまでロックを取得するのを待たなければなりません。 これはスケーラブルではなく、大規模なコレクションでのパフォーマンスが大幅に低下します。 さらに、この設計は競合を完全に防ぐものではありません。 詳細はMSDNウェブサイトのページをご覧ください:ジェネリックコレクションにおける同期

.NET Framework 2.0で導入されたコレクションクラスはSystem.Collections.Generic名前空間にあります。 これらのコレクションクラスには、リスト<T>、辞書<TKey、TValueなどが含まれます> これらのクラスは、.NET Framework 1.0クラスと比べてより高い型のセキュリティとパフォーマンスを提供します。 しかし、.NET Framework 2.0のコレクションクラスはスレッド同期を提供していません。 複数のスレッドでアイテムを追加または削除する際、ユーザーコードがすべての同期を提供しなければなりません。

.NET Framework 4で並行コレクションクラスを使用することを推奨します。なぜなら、これらは.NET Framework 2.0のコレクションクラスの型安全性を提供するだけでなく、.NET Framework 1.0コレクションが提供するスレッドセキュリティよりも効率的かつ完全なスレッドセキュリティを提供するからです。


一部の同時収集タイプは、SpinLock、SpinWait、SemaphoreSlim、CountdownEventなどの軽量同期機構を使用しており、これらは.NET Framework 4で新たに導入されました。 通常、上記の同期タイプは、スレッドを実際の待機状態にする前に短時間「ビジースピニング」を使用します。 待機時間が非常に短くなると予想される場合、スピンは待機よりもはるかに少ない計算資源を消費します。待機にはカーネル変換が多く費やされ、多くのリソースが消費されます。 回転を使うコレクションクラスでは、この効率性により複数のスレッドが非常に高速でアイテムを追加・削除できます。 リミットとブロッキングの詳細については、SpinLockおよびSpinWaitをご覧ください。 ConcurrentQueue<T>とConcurrentStack<T>クラスはロックを一切使いません。 代わりに、スレッドの安全性のためにInterlocked操作に依存しています。

説明

並行コレクションクラスはICollectionをサポートするため、IsSynchronizedおよびSyncRootプロパティの実装を提供します。たとえそれらが無関係であってもです。 IsSynchronizedは常にfalseを返しますが、SyncRootは常にnull(Visual BasicではNothing Not)です。

以下の表はSystem.Collections.Concurrent名前空間内のコレクションタイプを示しています。



種類
形容
ブロッキングコレクション<T>
<T> IProducerConsumerCollectionの実装に伴うあらゆる種類のスロットリングおよびブロッキングを提供します。 詳細については、BlockingCollectionの概要をご覧ください。
ConcurrentDictionary<TKey, TValue>
キー/値は辞書のスレッド安全実装です。
コンカレントキュー<T>
FIFO(先入れ先出し)キューのスレッド安全実装。
コンカレンスタック<T>
LIFO(後入れ先出し)スタックのスレッドセーフ実装。
コンカレントバッグ<T>
順序が乱れた要素の集合のスレッド安全実装。
IProducerConsumerCollection<T>
型はブロッキングコレクション以下のインターフェースで使用される







先の:.net/c# itextsharp でPDFコードを生成します
次に:インストールパッケージ:「MvvmLightLibs」はすでに「CommonServiceLocator...」に対して依存関係が定義されています...
掲載地 2017/11/08 15:24:45 |
はい、学びました
 地主| 掲載地 2021/02/08 10:00:41 |
リストは<T>、反復中にリストが一切変更されなければスレッドセーフです。
 地主| 掲載地 2021/03/23 11:32:46 |
ConcurrentDictionaryは新規および更新された更新をサポートしています
https://www.itsvse.com/thread-2955-1-1.html

 地主| 掲載地 2023/06/24 14:20:57 |
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com