Хранение значений в web.config - AppSettings или configSection - что эффективнее?
-
03-07-2019 - |
Вопрос
Я пишу страницу, которая может использовать несколько разных тем, и я собираюсь сохранить некоторую информацию о каждой теме в web.config.
Эффективнее ли создать новую SectionGroup и сохранить все вместе или просто поместить все в AppSettings?
Решение для конфигурирования
<configSections>
<sectionGroup name="SchedulerPage">
<section name="Providers" type="System.Configuration.NameValueSectionHandler"/>
<section name="Themes" type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>
</configSections>
<SchedulerPage>
<Themes>
<add key="PI" value="PISchedulerForm"/>
<add key="UB" value="UBSchedulerForm"/>
</Themes>
</SchedulerPage>
Чтобы получить доступ к значениям в configSection, я использую этот код:
NameValueCollection themes = ConfigurationManager.GetSection("SchedulerPage/Themes") as NameValueCollection;
String SchedulerTheme = themes["UB"];
Решение для настройки приложений
<appSettings>
<add key="PITheme" value="PISchedulerForm"/>
<add key="UBTheme" value="UBSchedulerForm"/>
</appSettings>
Чтобы получить доступ к значениям в AppSettings, я использую этот код
String SchedulerTheme = ConfigurationManager.AppSettings["UBSchedulerForm"].ToString();
Решение
Для более сложной настройки конфигурации я бы использовал раздел пользовательской конфигурации, который четко определяет роли каждого раздела, например
<appMonitoring enabled="true" smtpServer="xxx">
<alertRecipients>
<add name="me" email="me@me.com"/>
</alertRecipient>
</appMonitoring>
В своем классе конфигурации вы можете предоставить свои свойства с помощью чего-то вроде
public class MonitoringConfig : ConfigurationSection
{
[ConfigurationProperty("smtp", IsRequired = true)]
public string Smtp
{
get { return this["smtp"] as string; }
}
public static MonitoringConfig GetConfig()
{
return ConfigurationManager.GetSection("appMonitoring") as MonitoringConfig
}
}
Затем вы можете получить доступ к свойствам конфигурации следующим образом из своего кода
string smtp = MonitoringConfig.GetConfig().Smtp;
Другие советы
Не будет никакой ощутимой разницы с точки зрения эффективности.
AppSettings отлично подходит, если все, что вам нужно, - это пары имя / значение.
Для чего-то более сложного стоит создать раздел пользовательской конфигурации.
Для примера, который вы упомянули, я бы использовал AppSettings .
Разницы в производительности не будет, поскольку ConfigurationManager.AppSettings в любом случае просто вызывает GetSection("AppSettings").Если вам нужно будет перечислить все ключи, то пользовательский раздел будет лучше, чем перечислять все AppSettings и искать некоторый префикс в ключах, но в остальном проще придерживаться AppSettings, если вам не нужно что-то более сложное, чем NameValueCollection .