比較的静的で、DB から定期的に更新されるデータ用のカスタム キャッシュ オブジェクトを作成しています。厳密に型指定された DataSet を使用して、キャッシュされたデータを格納することにしました。現在、カスタム キャッシュ オブジェクトへの読み取りと更新 (クライアントはキャッシュに書き込むことはできず、更新のみ) のアクセスは、ReaderWriterLockSlim を介して同期されます。ただし、キャッシュのクライアントが厳密に型指定されたデータ セット内のデータ (DataTables、DataRows など) を破損しないようにするために、構成オブジェクトを同時に変更する必要があります。データを変更します。したがって、私のアプローチは、キャッシュ項目を検索するときに、厳密に型指定された DataSet を複製し、必要な行とそれに関連する親/子行のコピーを入力して、それをクライアントに返すことです。基本的に、不変のキャッシュ データのコピーをクライアントに返すので、クライアントがそれを変更しようとしても、他のスレッドには影響しません。
私の質問は、これを ReaderWriterLockSlim 読み取りロック内で安全に実行できるかということです。より直接的に言えば、DataSet.Clone、DataTable.ImportRow などのメソッドは、本質的にリーダー スレッドに対して安全ですか。つまり、クローン/コピーされたオブジェクトに対する読み取り専用操作ですか? DataSet、DataTable などの MSDN ドキュメントからこのメモを検討してください。
「この型は、マルチスレッドの読み取り操作に対して安全です。書き込み操作はすべて同期する必要があります。」