1

比較的静的で、DB から定期的に更新されるデータ用のカスタム キャッシュ オブジェクトを作成しています。厳密に型指定された DataSet を使用して、キャッシュされたデータを格納することにしました。現在、カスタム キャッシュ オブジェクトへの読み取りと更新 (クライアントはキャッシュに書き込むことはできず、更新のみ) のアクセスは、ReaderWriterLockSlim を介して同期されます。ただし、キャッシュのクライアントが厳密に型指定されたデータ セット内のデータ (DataTables、DataRows など) を破損しないようにするために、構成オブジェクトを同時に変更する必要があります。データを変更します。したがって、私のアプローチは、キャ​​ッシュ項目を検索するときに、厳密に型指定された DataSet を複製し、必要な行とそれに関連する親/子行のコピーを入力して、それをクライアントに返すことです。基本的に、不変のキャッシュ データのコピーをクライアントに返すので、クライアントがそれを変更しようとしても、他のスレッドには影響しません。

私の質問は、これを ReaderWriterLockSlim 読み取りロック内で安全に実行できるかということです。より直接的に言えば、DataSet.Clone、DataTable.ImportRow などのメソッドは、本質的にリーダー スレッドに対して安全ですか。つまり、クローン/コピーされたオブジェクトに対する読み取り専用操作ですか? DataSet、DataTable などの MSDN ドキュメントからこのメモを検討してください。

「この型は、マルチスレッドの読み取り操作に対して安全です。書き込み操作はすべて同期する必要があります。」

4

2 に答える 2

1

はい。DataSet と DataTable および関連項目は、読み取りに関してはスレッドセーフです。あなた自身の引用で述べたように。

したがって、各脅威がキャッシュ アイテムのクローンを作成し、そのクローンを変更する限り、心配する必要はありません。

はい、これはすべて、複数の読み取り操作と 1 つの書き込み操作を同期するために作成された ReaderWriterLockSlim のスコープ内で安全に実行できます。

于 2013-04-22T20:31:26.790 に答える