Storing values in the web.config - appSettings or configSection - which is more efficient?

appsettings, asp.net, configsection, performance, web-config

Solution

For more complex configuration setup, I would use a custom configuration section that clearly defines the roles of each section for example

<appMonitoring enabled="true" smtpServer="xxx">
  <alertRecipients>
    <add name="me" email="me@me.com"/>
  </alertRecipient>
</appMonitoring>

In your configuration class you can expose your properties with something like

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
  }
}

You can then access configuration properties in the following way from your code

string smtp = MonitoringConfig.GetConfig().Smtp;

Problem

I'm writing a page that can use a couple of different themes, and I'm going to store some information about each theme in the web.config. Is it more efficient to create a new sectionGroup and store everything together, or just put everything in appSettings? configSection solution ``` <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> ``` To access values in the configSection, I am using this code: ``` NameValueCollection themes = ConfigurationManager.GetSection("SchedulerPage/Themes") as NameValueCollection; String SchedulerTheme = themes["UB"]; ``` appSettings solution ``` <appSettings> <add key="PITheme" value="PISchedulerForm"/> <add key="UBTheme" value="UBSchedulerForm"/> </appSettings> ``` To access values in appSettings, I am using this code ``` String SchedulerTheme = ConfigurationManager.AppSettings["UBSchedulerForm"].ToString(); ```

Original source