Dot-Net
重複呼叫 ConfigurationManager.AppSettings 以獲取 appsetting 值的性能問題?
我正在開發一個程式碼庫,其中散佈著許多相同的 ConfigurationManager.AppSetting 呼叫。
這聽起來像是一個可能的性能問題嗎?
或者因為數據非常小是微不足道的而不是“昂貴的”?不斷返回文件以獲取數據,還是 .NET 執行時記憶體文件/值/呼叫?
如果這不是性能問題,是否只是訪問應用程序配置值的一種雜亂無章的方法,並且應該重新分解以更清潔和一致地實現訪問設置?
我會說這更多的是程式碼可維護性問題而不是性能問題。除非您有程式碼嘗試在執行數百次的循環中執行查找,否則簡單的字典查找
AppSettings不會成為問題。AppSettings這樣的程式碼肯定會導致性能問題。但更重要的是您將擁有ConfigurationManager.AppSettings["MyKey"]整個程式碼庫。您正在引入一根魔線。如果您必須更改配置文件中的密鑰,則必須在所有項目中進行徹底的搜尋和替換。此外,我們通常會根據 appSettings 中儲存的值做出一些決定。它並不總是直接讀取並按原樣使用值。有時您會根據價值做出決定。例如,if (ConfigurationManager.AppSettings["DebugMode"] == "yes") do this else do that你可能會在數百個地方重複這個邏輯。現在假設您需要在此處添加另一個條件:
if (ConfigurationManager.AppSettings["DebugMode"] == "yes" || ConfigurationManager.AppSettings["InternetNotAvailable"] == "yes") do this else do that這變得一團糟。你的程式碼開始發臭。
所以,我總是建議我的開發團隊永遠不要
ConfigurationManager.AppSettings在程式碼中的任何地方使用。使用一些靜態類,您可以在其中讀取配置值,並且所有此類決策都預記憶體到單個變數中。例如,static class ConfigHelper { private readonly static bool ExternalWebserviceCallAllowed = ConfiguationManager.AppSettings["DevMode"] == "false" && ConfigurationManager.AppSettings["InternetAvailable"] == "true"; } . . if (ConfigHelper.ExternalWebserviceCallAllowed) do this else do that這不僅在性能上更好,而且程式碼的可維護性和可擴展性也很高。