2008-10-15 9 views
11

Estoy escribiendo una página que puede usar un par de temas diferentes, y voy a almacenar información sobre cada tema en el web.config.Almacenamiento de valores en web.config - appSettings o configSection - ¿cuál es más eficiente?

¿Es más eficiente crear una nueva sección Group y almacenar todo junto, o simplemente poner todo en appSettings?

solución configSection

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

Para acceder a los valores en el configSection, estoy utilizando este código: solución

NameValueCollection themes = ConfigurationManager.GetSection("SchedulerPage/Themes") as NameValueCollection; 
    String SchedulerTheme = themes["UB"]; 

appsettings

<appSettings> 
    <add key="PITheme" value="PISchedulerForm"/> 
    <add key="UBTheme" value="UBSchedulerForm"/> 
</appSettings> 

Para acceder a los valores de configuración de la aplicación, estoy usando este código

String SchedulerTheme = ConfigurationManager.AppSettings["UBSchedulerForm"].ToString(); 

Respuesta

11

Para la configuración de configuración más compleja, me gustaría utilizar una sección de configuración personalizada que define claramente las funciones de cada sección, por ejemplo

<appMonitoring enabled="true" smtpServer="xxx"> 
    <alertRecipients> 
    <add name="me" email="[email protected]"/> 
    </alertRecipient> 
</appMonitoring> 

En su clase de configuración se puede exponer a sus propiedades con algo como

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

a continuación, puede acceder a las propiedades de configuración de la siguiente manera a partir del código

string smtp = MonitoringConfig.GetConfig().Smtp; 
10

No habrá una diferencia medible en términos de eficiencia.

AppSettings es genial si todo lo que necesita son pares de nombre/valor.

Para cualquier cosa más compleja, vale la pena crear una sección de configuración personalizada.

Para el ejemplo que menciona, yo usaría appSettings.

6

No habrá diferencia en el rendimiento, ya que ConfigurationManager.AppSettings simplemente llama a GetSection ("appSettings") de todos modos. Si necesita enumerar todas las claves, una sección personalizada será más agradable que enumerar todas las configuraciones de la aplicación y buscar algún prefijo en las claves, pero de lo contrario es más fácil seguir las configuraciones de la aplicación a menos que necesite algo más complejo que NameValueCollection.

+0

pero digamos que seguimos agregando valores a appSettings y la lista se vuelve enorme. ¿No sería exitoso enumerar toda la lista y encontrar la entrada que necesita? Creo que eso es lo que hace el marco. ¿Busca la sección appSettings y luego enumera en todos los pares de valores clave para encontrar uno con el valor clave correspondiente? – ItsZeus

Cuestiones relacionadas