asp.netweb-configperformanceappsettingsconfigsection

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


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();

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;