gpt4 book ai didi

c# - ConfigurationManager.AppSettings[Key] 是否每次都从 web.config 文件中读取?

转载 作者:IT王子 更新时间:2023-10-29 03:42:51 26 4
gpt4 key购买 nike

我想知道 ConfigurationManager.AppSettings[Key] 是如何工作的。

每次我需要 key 时,它是否从物理文件中读取?如果是这样,我是否应该在缓存中读取我的 web.config 的所有应用程序设置,然后从中读取?

或者 ASP.NET 或 IIS 是否只在应用程序启动时加载一次 web.config 文件?

如何验证每次读取是否访问了物理文件?如果我更改 web.config,IIS 会重新启动我的应用程序,所以我无法那样验证它。

最佳答案

它会在第一次访问属性时被缓存,因此它不会在您每次请求值时都从物理文件中读取。这就是为什么需要重新启动 Windows 应用程序(或 Refresh 配置)以获取最新值,以及为什么 ASP.Net 应用程序在您编辑 web.config 时自动重新启动的原因。答案 How to prevent an ASP.NET application restarting when the web.config is modified 中的引用资料中讨论了为什么 ASP.Net 硬连线以重新启动。 .

我们可以使用 ILSpy 来验证这一点并查看 System.Configuration 的内部结构:

public static NameValueCollection AppSettings
{
get
{
object section = ConfigurationManager.GetSection("appSettings");
if (section == null || !(section is NameValueCollection))
{
throw new ConfigurationErrorsException(SR.GetString("Config_appsettings_declaration_invalid"));
}
return (NameValueCollection)section;
}
}

起初,这确实看起来每次都会获得该部分。查看 GetSection:

public static object GetSection(string sectionName)
{
if (string.IsNullOrEmpty(sectionName))
{
return null;
}
ConfigurationManager.PrepareConfigSystem();
return ConfigurationManager.s_configSystem.GetSection(sectionName);
}

这里的关键行是 PrepareConfigSystem() 方法;这将初始化 ConfigurationManager 持有的 IInternalConfigSystem 字段的实例 - 具体类型是 ClientConfigurationSystem

作为此负载的一部分,Configuration 的一个实例类被实例化。此类实际上是配置文件的对象表示,并且似乎由静态字段中的 ClientConfigurationSystem 的 ClientConfigurationHost 属性持有 - 因此它被缓存。

您可以通过执行以下操作(在 Windows 窗体或 WPF 应用程序中)凭经验对此进行测试:

  1. 启动您的应用
  2. 访问 app.config 中的值
  3. 更改 app.config
  4. 检查新值是否存在
  5. 调用ConfigurationManager.RefreshSection("appSettings")
  6. 检查新值是否存在。

事实上,如果我只是阅读关于 RefreshSection 的评论,我本可以节省一些时间。方法:-)

/// <summary>Refreshes the named section so the next time that it is retrieved it will be re-read from disk.</summary>
/// <param name="sectionName">The configuration section name or the configuration path and section name of the section to refresh.</param>

关于c# - ConfigurationManager.AppSettings[Key] 是否每次都从 web.config 文件中读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com