asp.net - Almacenar valores en web.config-appSettings o configSection-¿cuál es más eficiente?
web-config performance (3)
No habrá diferencia en el rendimiento, ya que ConfigurationManager.AppSettings solo 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.
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.
¿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 configSection, estoy usando este código:
NameValueCollection themes = ConfigurationManager.GetSection("SchedulerPage/Themes") as NameValueCollection;
String SchedulerTheme = themes["UB"];
solución appSettings
<appSettings>
<add key="PITheme" value="PISchedulerForm"/>
<add key="UBTheme" value="UBSchedulerForm"/>
</appSettings>
Para acceder a valores en appSettings, estoy usando este código
String SchedulerTheme = ConfigurationManager.AppSettings["UBSchedulerForm"].ToString();
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 mencionas, usaría appSettings.
Para una configuración de configuración más compleja, usaría una sección de configuración personalizada que defina claramente los roles 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 puede exponer 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 desde su código
string smtp = MonitoringConfig.GetConfig().Smtp;