c# - क्या डिशैशनहेन्डलर और नेमवैल्यूशनहेन्डलर के बीच अंतर है?



.net configuration (1)

.NET में, हम <configSections> तत्व का उपयोग करके कस्टम विन्यास अनुभाग बना सकते हैं, जैसे:

<configuration>
  <configSections>
    <section name="dictionarySample"
             type="System.Configuration.DictionarySectionHandler"/>
    <section name="nameValueSample"
             type="System.Configuration.NameValueSectionHandler" />
  </configSections>
  <dictionarySample>
    <add key="key1" 
         value="value1"/>
  </dictionarySample>
  <nameValueSample>
    <add key="key2" 
         value="value2" />
  </nameValueSample>
</configuration>

ऊपर, मैं दो खंडों को परिभाषित कर रहा हूँ एक प्रकार का NameValueSectionHandler , और दूसरा नाम NameValueSectionHandler

जहां तक ​​मैं बता सकता हूं, ये दोनों हैंडलर बिल्कुल उसी तरीके से उपयोग किए जाते हैं और परिणाम समान विन्यास अनुभाग में होते हैं।

तो, क्या कोई अंतर है, या मैं उन्हें एक दूसरे का उपयोग कर सकता हूँ?


टीएल; डीआर NameValueSectionHandler string लिए ठीक है -> सरल स्थितियों में string जोड़े, लेकिन अगर आपको कुशल होने के लिए अपने कॉन्फ़िगरेशन की आवश्यकता होती है (विशेषकर यदि आप बार-बार remove का उपयोग कर रहे हैं तो), ऑनलाइनएक्शंसहैंडलर का उपयोग करें

मैं इन दो वर्गों (नाम, शब्दकोश ) के स्रोत में खोला और कार्यान्वयन में बहुत कम अंतर पाया।

यद्यपि ध्यान देने योग्य दो चीजें हैं:

  1. जैसा कि हैंडलर के नाम पर संकेत मिलता है, प्राथमिक अंतर उन संग्रहों में होता है, जिनका उपयोग वे करते हैं: Hashtable एक Hashtable में इसकी कुंजी / मान जोड़े को स्टोर करता है, जबकि NameValueSectionHandler एक NameValueCollection का उपयोग करता है।
  2. DictionarySectionHandler , value की आवश्यकता नहीं है और अगर वह प्रदान नहीं की जाती है तो उसे खाली स्ट्रिंग में डिफॉल्ट होगा, लेकिन NameValueSectionHandler को value आवश्यकता होती है।

जहां तक Hashtable और नाम NameValueCollection बीच मतभेद हैं, NameValueCollection में डुप्लिकेट कीज़ हो सकती हैं, लेकिन Hashtable नहीं कर सकता। इसके अतिरिक्त, Hashtable इसके कार्यान्वयन में काफी अधिक कुशल है।

एमएसडीएन ब्लॉग पर इस लेख में Hashtable और NameValueCollection बारे में कुछ अच्छी जानकारी है।

अपने निष्कर्षों को सारांशित करने के लिए, Hashtable है ...

  • लुकअप पर 2.6x अधिक कुशल
  • 8.5x अधिक कुशल जोड़ने पर
  • हटाने के लिए अधिक कुशलता का एक आदेश

वे NameValueCollection का उपयोग करने पर कुछ उपयोगी जानकारी के साथ लेख को लपेटते हैं:

तो आप सोच सकते हैं कि जब आप NameValueCollection उपयोग करना चाहते हैं NameValueCollection केवल स्ट्रिंग्स की कुंजी और मान स्वीकार करता है, इसलिए यह एक बहुत विशिष्ट संग्रह है। यह ऐसी स्थिति में उपयोगी है जिसमें आपको एक कुंजी के साथ एकाधिक मूल्यों को संबद्ध करने की आवश्यकता होती है, या हैश आधारित खोजों के साथ-साथ इंडेक्स द्वारा लुकअप (और उम्मीद है कि बहुत अधिक निष्कासन नहीं करता)।

हालांकि, अगर आपको स्ट्रिंग कुंजी / मान युग्मों को संगृहीत करने की आवश्यकता है और आपको अनुक्रमणिका-आधारित लुकअप करने की आवश्यकता नहीं है या एक कुंजी के साथ एकाधिक मूल्यों को संबद्ध करने की आवश्यकता नहीं है, तो आप जेनेरिक डिक्शनरी क्लास का उपयोग करना पसंद कर सकते हैं। इसमें सभी मामलों में हाशटेबल के रूप में एक समान अस्मिततावादी व्यवहार होता है और इसके अलावा मुक्केबाजी के कारण किसी भी कीमत से बचा जाता है।





configsection