計算的に負担となる構成情報のロード/再ロードから各実行コンテキストを必要とせずに、スレッドセーフなインターフェイスを介してカスタムSystem.Configurationベースの構成データにアクセスする簡単な方法はありますか?
System.Configurationクラスは、Microsoftの.Netライブラリドキュメントの他のほとんど(すべて?)のクラスと同様に、次のスレッドセーフ情報で注釈が付けられています。
このタイプのパブリックスタティック(Visual Basicで共有)メンバーはすべてスレッドセーフです。インスタンスメンバーは、スレッドセーフであることが保証されていません。
私がこれを読んだことにより、および他の同様のメソッド(たとえば)ConfigurationSection
から返されるオブジェクトはスレッドセーフであると見なされてはならず、したがって複数の実行コンテキストで使用されるべきではありません。これにより、セクションオブジェクトへのアクセスは安全である可能性がありますが、オブジェクト自体のメンバーは安全ではないため、スレッドセーフであるシングルトンにを格納することは禁止されています。ConfigurationManager.GetSection(string)
OpenExeConfiguration(string exePath).GetSection(string)
ConfigurationSection
ただし、への複数の呼び出しGetSection
では、構成ファイルの再解析と、ConfigurationSection
初期化後に構成が変更される可能性が低いことを考慮して、オーバーヘッドの高い新しいインスタンスを割り当てる必要があります。さらに、スレッドセーフにされた別のオブジェクトに構成データをコピーすると、最初に組み込みの構成パッケージを使用する主な利点の1つが無効になるようです(ボイラープレートをあまり使用せずに、型変換および検証された構成情報に簡単にアクセスできます)。コード)。
それで、System.Configuration
構成セクションの過剰な解析と割り当てに頼ることなく、スレッドセーフな方法で使用する方法はありますか?独自の実装ConfigurationSection
により、インターフェイスを介してアクセスしている場合でも、Microsoftが提供する保証の欠如から解放されますか(その場合、ベースのインデクサーSystem.Configuration
へのアクセスが必要な場合に、スレッドセーフになるように実装するにはどうすればよいですか?ConfigurationSection
構成されたデータへのアクセス)?