Статическая операция класса доступа ConfigurationManager - PullRequest
4 голосов
/ 22 сентября 2011

Я подумываю о создании статического класса для обработки всего моего доступа к appSettings Web.config. Например, это будет выглядеть так:

public static class ConfigManager
{
  public static string Timeout = ConfigurationManager.AppSettings["Timeout"];

  public static string Version = ConfigurationManager.AppSettings["Version"];
}

Я считаю, что это даст мне центральное место для изменения ключей в настройках приложения, если я захочу изменить их в будущем, и даст мне intellisense для всех параметров конфигурации в моем приложении.

У меня вопрос, как это будет работать, так как я не уверен, как работает статика под капотом. Я надеюсь, что в первый раз, когда я получу доступ к одному из свойств, все свойства будут считаны из конфигурации и помещены в память, и что все последующие попадания будут просто идти в память вместо просмотра конфигурации. К сожалению, это будет означать, что изменения конфигурации во время выполнения не вступят в силу. Я также подумал, что, возможно, будет загружено только то свойство, на которое я смотрю, или все они будут загружаться каждый раз, когда я получаю доступ к любому свойству.

Кто-нибудь знает, как комбо наличия статического свойства, читающего из конфигов, будет вести себя под капотом?

1 Ответ

2 голосов
/ 02 декабря 2011

Статический означает, что в памяти будет только один экземпляр этого класса или переменной.

Поскольку вы выбрали статический класс, значения будут установлены один раз вашим назначением при вызове статического конструктора. Это произойдет при первом использовании класса.

Каждый раз, когда вы обращаетесь к переменной, она извлекает значение из памяти.

Если вас беспокоит возможность изменения значений во время выполнения, вы можете вместо этого использовать свойство и затем реализовать стратегию кэширования, которая обновит это свойство в заданный интервал времени.

...