2010-11-28 3 views
12

У меня есть много запросов, которые считывают мой веб-конфигурационный файлКэширование WebConfigurationManager.AppSettings?

variable = WebConfigurationManager.AppSettings["BLAH"] 

ли WebConfigurationManager.AppSettings чтения с диска каждый раз, или он кэшированных в памяти?

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

ответ

17

Конфигурационные настройки кэшируются в памяти, а web.config не анализируется каждый раз, когда вы вызываете эту функцию.

+1

+1 здесь ссылка на документацию. [Эти члены выполняют операции только для чтения, используют один кешированный экземпляр конфигурации и знают многопоточность.] (Http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx#remarksToggle) – Craig 2012-01-04 14:33:13

3

Я просто изучал эту тему. И это правда, что настройки конфигурации кэшируются в памяти.

Однако вы по-прежнему можете видеть преимущество в производительности, сохраняя значения в статических переменных, как вы упоминаете (и как описано here). Это связано с тем, что коллекция AppSettings - это NameValueCollection. И поэтому каждый раз, когда вы ссылаетесь на AppSetting, он должен искать коллекцию, которая является операцией O (n).

Хотя, вероятно, это редкая вещь, которая когда-либо была бы узким местом вашего приложения. Но можно представить сценарий с жестким циклом, ссылающимся на одно значение в AppSettings, где коллекция AppSettings очень велика. В этом случае вы также можете кэшировать значение в некотором роде, даже если оно просто хранит его в локальной переменной перед запуском вашего цикла.

Смежные вопросы