تخزين القيم في شبكة الإنترنت.التكوين - appSettings أو configSection - الذي هو أكثر كفاءة ؟

StackOverflow https://stackoverflow.com/questions/204695

سؤال

أنا أكتب صفحة يمكن استخدام زوجين من مواضيع مختلفة و أنا ذاهب لتخزين بعض المعلومات عن كل موضوع في شبكة الإنترنت.config.

هو أكثر كفاءة في خلق جديد sectionGroup وتخزين كل شيء معا ، أو مجرد وضع كل شيء في appSettings?

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>

للوصول إلى القيم في configSection, أنا باستخدام هذا الكود:

    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>

للوصول إلى القيم في appSettings, أنا باستخدام هذا الكود

    String SchedulerTheme = ConfigurationManager.AppSettings["UBSchedulerForm"].ToString();
هل كانت مفيدة؟

المحلول

لمزيد من التكوين معقدة الإعداد, وأود أن استخدام تكوين مخصص المقطع الذي يحدد بوضوح دور كل قسم على سبيل المثال

<appMonitoring enabled="true" smtpServer="xxx">
  <alertRecipients>
    <add name="me" email="me@me.com"/>
  </alertRecipient>
</appMonitoring>

في فئة التكوين يمكنك تعريض الممتلكات الخاصة بك مع شيء من هذا القبيل

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

ثم يمكنك الوصول إلى خصائص تكوين بالطريقة التالية من التعليمات البرمجية الخاصة بك

string smtp = MonitoringConfig.GetConfig().Smtp;

نصائح أخرى

لن يكون هناك وكبيرا من حيث الكفاءة.

AppSettings كبيرة إذا كان كل ما تحتاجه هي أزواج الاسم/القيمة.

أي شيء أكثر تعقيدا ، فإنه يستحق خلق تكوين مخصص القسم.

على سبيل المثال أذكر لكم, كنت استخدم appSettings.

لن يكون هناك فرق في الأداء منذ ConfigurationManager.AppSettings يدعو فقط GetSection("appSettings") على أي حال.إذا كنت سوف تحتاج إلى تعداد كل المفاتيح ، ثم قسم مخصص سوف يكون أجمل من تعداد كل من appSettings وتبحث عن بعض البادئة على المفاتيح ، لكن وإلا فإنه من السهل التمسك appSettings إلا إذا كنت بحاجة إلى شيء أكثر تعقيدا من NameValueCollection.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top