2008-10-15 4 views
11

J'écris une page qui peut utiliser plusieurs thèmes différents, et je vais stocker des informations sur chaque thème dans le web.config.Stocker des valeurs dans web.config - appSettings ou configSection - qui est plus efficace?

Est-il plus efficace de créer un nouveau groupe de sections et de tout stocker ensemble, ou simplement de tout mettre dans appSettings?

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

Pour accéder à des valeurs dans le configSection, je suis en utilisant ce code:

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

solution appSettings

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

Pour accéder à des valeurs dans appSettings, j'utilise ce code

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

Répondre

11

Pour la configuration de configuration plus complexe, j'utiliser une section de configuration personnalisée qui définit clairement les rôles de chaque section par exemple

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

Dans votre classe de configuration, vous pouvez exposer vos propriétés avec quelque chose comme

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

Vous pouvez alors accéder aux propriétés de configuration de la manière suivante à partir du code

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

Il n'y aura pas de différence mesurable en termes d'efficacité. AppSettings est génial si tout ce dont vous avez besoin sont des paires nom/valeur.

Pour tout ce qui est plus complexe, cela vaut la peine de créer une section de configuration personnalisée.

Pour l'exemple que vous mentionnez, j'utiliser appSettings.

6

Il n'y aura pas de différence de performance, puisque ConfigurationManager.AppSettings appelle simplement GetSection ("appSettings") de toute façon. Si vous avez besoin d'énumérer toutes les clés, une section personnalisée sera plus agréable que d'énumérer tous les appSettings et de chercher un préfixe sur les clés, mais sinon il est plus facile de s'en tenir à appSettings sauf si vous avez besoin de quelque chose de plus qu'une NameValueCollection.

+0

mais disons que nous continuons à ajouter des valeurs à appSettings et la liste devient énorme. Ne serait-il pas question de performance pour énumérer toute la liste et trouver l'entrée qui est nécessaire? Je crois que c'est ce que fait le cadre. Il récupère la section appSettings et énumère ensuite dans toute la paire de valeurs de clé pour en trouver une avec la valeur clé correspondante. – ItsZeus

Questions connexes