Asp.net

閱讀 appsettings.json 貴嗎?

  • January 18, 2018

目前我正在開發一個 .net core 2 應用程序,該應用程序應該從 appsettings.json 讀取基於域的每個請求的一些鍵。(我不得不提一下,我有一個包含 3 個共享相同 appsettings.json 的項目的解決方案)我擔心 appsettings.json 文件在每個請求上的讀取時間。應用程序啟動時是否會記憶體此文件?我的啟動建構子如下:

public IConfiguration Configuration { get; }
private readonly ILoggerFactory _logger;

public Startup(IHostingEnvironment env, ILoggerFactory logger)
       {
           string settingPath = Path.GetFullPath(Path.Combine(@"../SharedConfig/globalAppSettings.json"));
           var builder = new ConfigurationBuilder()
               .SetBasePath(env.ContentRootPath)
               .AddJsonFile(settingPath)
               .AddEnvironmentVariables();

           Configuration = builder.Build();

           _logger = logger;
       }

配置 API 使用使用來自之前註冊的源集的鍵和值IConfigurationBuilder.Build建構的方法構造鍵和值。IConfiguration

如果簡單地說,實現了以下機制:

  • 在內部,特定的提供者用於從註冊的源中讀取。基於文件的源具有適當的FileConfigurationProvider. 對於 JSON 文件,這是一個JsonConfigurationProvider.
  • IConfigurationBuilder.Build方法為每個註冊的源構造提供者並呼叫該provider.Load方法。
  • Load``Provider.Data從源讀取數據並填充鍵值對的內部集合(更具體的字典)。
  • Data當您需要在應用程序中通過鍵獲取值時,Configuration API 會使用此集合。

當 Configuration API 創建FileConfigurationProvider實例時,它使用FileConfigurationSource.ReloadOnChange屬性的值(預設為 false)。如果此屬性為真,則提供者訂閱“文件更改”事件(在 ctor 中)以在Load每次文件更改時呼叫(並重新填充Data集合。來自github

if (Source.ReloadOnChange && Source.FileProvider != null)
{
   ChangeToken.OnChange(
        () => Source.FileProvider.Watch(Source.Path),
        () => {
                 Thread.Sleep(Source.ReloadDelay);
                 Load(reload: true);
              });
}

引用自:https://stackoverflow.com/questions/48316898