簡體   English   中英

在Azure Functions中讀取環境變量時,為什么建議使用GetEnvironmentVariable而不是AppSettings

[英]Why is GetEnvironmentVariable recommended to use over AppSettings when reading Environment variables in Azure Functions

Microsoft文檔說明了這一點

在本地開發和在Azure中運行時,可以從環境變量中讀取應用程序設置。 在本地開發時,應用程序設置來自local.settings.json文件中的Values集合。 在本地和Azure環境中,GetEnvironmentVariable(“”)檢索指定應用程序設置的值。 例如,當您在本地運行時,如果您的local.settings.json文件包含{“Values”:{“WEBSITE_SITE_NAME”:“我的站點名稱”}},則會返回“我的站點名稱”。

System.Configuration.ConfigurationManager.AppSettings屬性是獲取應用程序設置值的備用API,但我們建議您使用此處所示的GetEnvironmentVariable。

沒有說明為什么它是推薦的方式。

  • 它有性能優勢嗎?
  • 是否存在從AppSettings讀取會導致空值的實例?
  • 它只是為了兼容不同的配置格式(即json,xml等)?

或者我只是接受這個作為生活中的事實而不知道為什么?

它有性能優勢嗎?

我會說一般它是基於我的測試。 GetEnvironmentVariableConfigurationManager快一點,在我的電腦上(100k次),其平均執行時間縮短約20μs,而Azure(B1 app服務計划,10k次)縮短約12μs。 這是一個統計結論,因為ConfigurationManager有時會更快。

是否存在從AppSettings讀取會導致空值的實例?

如果要讀取的值是按預期設置的,則可能只有一個場景我們通過使用ConfigurationManager --In v2函數獲取null,此時它不再有用。

它只是為了兼容不同的配置格式(即json,xml等)?

GetEnvironmentVariable沒有這樣的能力,也沒有格式兼容性的要求。 通過設計,Azure函數在本地開發中從local.settings.json獲取配置,當函數主機啟動時,將Values中的應用程序設置導入到當前進程的環境變量中。 所以沒有格式考慮。

總而言之, GetEnvironmentVariable

  • 簡潔 - 無需導入System.Configuration程序集即可使用ConfigurationManager
  • 通用 - 對於v1和v2,本地和Azure環境。(不包括local.settings.json中的ConnectionStrings )。
  • 更快 - 可能不那么可靠,我使用簡單的循環重復觸發與秒表測量(所有日志禁用)。

當然,我們仍然可以在v1函數中利用ConfigurationManager ,如果我們想在本地獲取ConnectionStrings ,我們必須使用它。

我能想到的一個動機是設置環境變量可確保敏感信息在源代碼倉庫中不會被硬編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM