Хранение значений в web.config - AppSettings или configSection - что эффективнее?

StackOverflow https://stackoverflow.com/questions/204695

Вопрос

Я пишу страницу, которая может использовать несколько разных тем, и я собираюсь сохранить некоторую информацию о каждой теме в 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top