是否有一种简单的方法可以通过线程安全的接口访问基于 System.Configuration 的自定义配置数据,而不需要每个执行上下文加载/重新加载配置信息,这将是计算上的负担?
System.Configuration 类与 Microsoft .Net 库文档中的大多数(全部?)其他类一样,都使用以下线程安全信息进行注释:
此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
根据我的阅读,从和其他类似方法(例如)ConfigurationSection
返回的对象不能被假定为线程安全的,因此不应被多个执行上下文使用。这禁止将 a 存储在原本是线程安全的单例中,因为虽然对部分对象的访问可能是安全的,但对象本身的成员并不安全。ConfigurationManager.GetSection(string)
OpenExeConfiguration(string exePath).GetSection(string)
ConfigurationSection
然而,多次调用GetSection
可能需要重新解析配置文件并分配ConfigurationSection
具有高开销的新实例,考虑到配置在初始化后不太可能发生变化。此外,将配置数据复制到另一个已成为线程安全的对象似乎首先破坏了使用内置配置包的主要好处之一(无需太多样板即可轻松访问类型转换和验证的配置信息代码)。
那么,有没有一种方法可以System.Configuration
以线程安全的方式使用,而不需要过度解析和分配配置部分?ConfigurationSection
即使您通过接口访问它,实现您自己的功能是否使您免于 Microsoft 提供的缺乏保证(如果是这样,当需要访问 base的索引器System.Configuration
时,您将如何实现它是线程安全的?ConfigurationSection
访问配置的数据)?