2008-10-15 16 views
11

Piszę stronę, która może korzystać z kilku różnych motywów i zamierzam przechowywać pewne informacje na temat każdego tematu w pliku web.config.Przechowywanie wartości w pliku web.config - appSettings lub configSection - który jest bardziej wydajny?

Czy wydajniej jest utworzyć nową sekcjęGrupa i przechowywać wszystko razem lub po prostu umieścić wszystko w aplikacji?

rozwiązanie 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> 

Aby uzyskać dostęp do wartości w configSection używam tego kodu: rozwiązanie

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> 

Aby uzyskać dostęp do wartości w appSettings, używam tego kodu

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

Odpowiedz

11

Dla bardziej złożonych ustawień konfiguracyjnych, chciałbym użyć niestandardowego sekcji konfiguracji, która jasno określa role poszczególnych sekcji np

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

W swojej klasie konfiguracji można wystawiać swoje właściwości czymś jak

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

Następnie można uzyskać dostęp do właściwości konfiguracji w następujący sposób z kodu

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

Nie będzie mierzalnej różnicy pod względem wydajności.

Ustawienia aplikacji są świetne, jeśli potrzebujesz tylko par nazwa/wartość.

Dla wszystkich bardziej złożonych, warto utworzyć sekcję konfiguracji niestandardowej.

Na przykład, o którym wspomniałeś, użyłbym aplikacji ustawień.

6

Nie będzie różnicy w wydajności, ponieważ ConfigurationManager.AppSettings po prostu wywołuje GetSection ("appSettings") w każdym razie. Jeśli będziesz musiał wyliczyć wszystkie klucze, wówczas sekcja niestandardowa będzie ładniejsza niż wyliczanie wszystkich ustawień aplikacji i szukanie jakiegoś prefiksu na klawiszach, ale w przeciwnym razie łatwiej będzie trzymać się ustawień aplikacji, chyba że potrzebujesz czegoś bardziej złożonego niż NameValueCollection.

+0

ale powiedzmy, że wciąż dodajemy wartości do aplikacji Ustawienia, a lista staje się ogromna. Czy nie byłoby wydajnym trafieniem wyliczyć całą listę i znaleźć wpis, który jest potrzebny? Wierzę, że to, co robi framework. Pobiera sekcję appSettings, a następnie wylicza we wszystkich parach klucz-wartość, aby znaleźć jedną z pasującą wartością klucza? – ItsZeus