दिलचस्प पोस्ट
एचटीटीपी पोस्ट का उपयोग करते हुए चित्र भेजना node.js fs.readdir रिकर्सिव निर्देशिका खोज आईओएस – एक दृश्य के माध्यम से सभी को छूते हैं कैसे उबाऊ ECMDERR को ठीक करने के लिए संबंधित वस्तु कब जारी होती है? एंड्रॉइड स्टूडियो 3.0 बीटा 4 पर डेक्स एरर JERSEY का प्रयोग करके इनपुट और आउटपुट बाइनरी स्ट्रीम? फ़ाइल अपलोड बिना एक्टिव संपत्ति के काम क्यों करती है? मेवेन के साथ फाइल कॉपी करने के लिए सर्वोत्तम प्रथाएं SQL सर्वर में प्राकृतिक जुड़ें जावास्क्रिप्ट के साथ रेडियो बटन मूल्य प्राप्त करें सभी तत्वों के सबसे ऊंचेतम को खोजने के लिए jQuery / CSS का उपयोग करें तुम कहाँ से jQuery पुस्तकालय शामिल करते हैं? Google JSAPI? CDN? जावा में स्प्रिंटफ़ समकक्ष Codeigniter REST सीएसवी आयात mysql करने के लिए

.NET HashTable वीएस डिक्शनरी – क्या डिक्शनरी को तेज़ हो सकता है?

मैं यह समझने की कोशिश कर रहा हूं कि कब और क्यों एक शब्दकोश या एक HashTable का उपयोग करें मैंने यहाँ पर एक खोज का थोड़ा सा किया है और लोगों को डिक्शनरी के जेनेरिक लाभों के बारे में बात कर रहे हैं जो मैं पूरी तरह से सहमत हूं, जो मुक्केबाजी की ओर जाता है और थोड़ा सा निष्पादन लाभ के लिए अनबॉक्स्ड लाभ देता है।

लेकिन मैंने यह भी पढ़ा है कि ऑब्जेक्ट्स हमेशा उस ऑब्जेक्ट को जिस क्रम में डाली जाती है, उसे वापस नहीं लाया जाएगा, यह सॉर्ट किया गया है। जहां एक हैशटेबल के रूप में होगा जैसा कि मैं समझता हूं यह कुछ परिस्थितियों के लिए हैशटेबल की तरफ बढ़ रहा है

मेरा सवाल वाकई है, उन परिस्थितियों में क्या हो सकता है? क्या मैं ऊपर से मेरी धारणाओं में गलत हूं? आप किन परिस्थितियों को दूसरे से ऊपर चुनने के लिए उपयोग कर सकते हैं, (हां, पिछले एक थोड़ा अस्पष्ट है)।

Solutions Collecting From Web of ".NET HashTable वीएस डिक्शनरी – क्या डिक्शनरी को तेज़ हो सकता है?"

System.Collections.Generic.Dictionary<TKey, TValue> और System.Collections.Hashtable वर्ग दोनों एक हैश तालिका डेटा संरचना आंतरिक रूप से बनाए रखें। उनमें से कोई भी आइटम के क्रम को संरक्षित करने की गारंटी नहीं देता है।

मुक्केबाजी / अनबॉक्स्ड मुद्दों को छोड़कर, ज्यादातर समय, उनके पास बहुत ही समान प्रदर्शन होना चाहिए।

उन दोनों के बीच प्राथमिक संरचनात्मक अंतर यह है कि Dictionary , टकराव के समाधान के लिए पुनर्जन्म (जब एक टकराव होता है, एक दूसरे के लिए कुंजी को मैप करने के लिए एक और हैश फ़ंक्शन का प्रयास करता है, तो मुकाबला हल करने के लिए चेनिंग (प्रत्येक हैश तालिका बाल्टी के लिए वस्तुओं की सूची को बनाए रखना) पर निर्भर है बाल्टी)।

यदि आप .NET Framework 2.0+ के लिए लक्षित कर रहे हैं, तो Hashtable श्रेणी का उपयोग करने के लिए बहुत कम लाभ है। यह प्रभावी रूप से Dictionary<TKey, TValue> द्वारा अप्रचलित प्रदान किया गया है

मुझे लगता है कि इसका मतलब अब आपके लिए कुछ भी नहीं है लेकिन सिर्फ उन लोगों के संदर्भ के लिए जिनके द्वारा रोकना

प्रदर्शन टेस्ट – सॉर्ट किए गए सूची बनाम। क्रमबद्धआधारी बनाम शब्दकोश बनाम हैशटेबल

एक और महत्वपूर्ण अंतर यह है कि हेशबैलेबल लॉक-फ्री कई पाठकों और एक ही लेखक को उसी समय, जबकि डिक्शनरी का समर्थन करता है, का समर्थन करता है।

हैशटेबल और शब्दकोश के बीच अंतर

शब्दकोश:

  • शब्दकोश त्रुटि देता है अगर हम एक कुंजी है जो मौजूद नहीं है खोजने की कोशिश।
  • हाशटेबल की तुलना में शब्दकोश तेज़ है क्योंकि इसमें कोई मुक्केबाजी और अनबॉक्सिंग नहीं है।
  • शब्दकोश एक सामान्य प्रकार है जिसका अर्थ है कि हम इसे किसी भी डेटा प्रकार से उपयोग कर सकते हैं।

हैश टेबल:

  • यदि हम अस्तित्व में नहीं हैं जो एक कुंजी खोजने की कोशिश करते हैं, तो हैशटेबल नल पर रिटर्न करता है।
  • हैशटेबल शब्दकोश की तुलना में धीमी है क्योंकि इसमें मुक्केबाजी और अनबॉक्सिंग की आवश्यकता होती है।
  • हैशटेबल एक सामान्य प्रकार नहीं है,

एमएसडीएन अनुच्छेद: " Dictionary<TKey, TValue> कक्षा में Hashtable श्रेणी के रूप में एक ही कार्यक्षमता है। एक विशिष्ट प्रकार ( Object ) की एक Dictionary<TKey, TValue> मूल्य प्रकार के लिए Hashtable तुलना में बेहतर प्रदर्शन है क्योंकि तत्वों Hashtable प्रकार के Object और इसलिए, मुक्केबाजी और अनबॉक्स्डिंग आमतौर पर तब होती है जब कोई मूल्य प्रकार को संचय या पुनर्प्राप्त करना "।

लिंक: http://msdn.microsoft.com/en-us/library/4yh14awz(v=vs.90).aspx

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

एक और महत्वपूर्ण अंतर यह है कि Hashtable थ्रेड सुरक्षित है Hashtable कई पाठक / एकल लेखक (एमआर / एसडब्ल्यू) थ्रेड सुरक्षा में बनाया गया है जिसका अर्थ है कि Hashtable लॉकिंग के बिना कई पाठकों के साथ एक लेखक की अनुमति देता है। Dictionary के मामले में कोई धागा सुरक्षा नहीं है, यदि आपको थ्रेड सुरक्षा की आवश्यकता है तो आपको अपना स्वयं का सिंक्रनाइज़ेशन कार्यान्वित करना होगा।

आगे विस्तृत करने के लिए:

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

.NET Framework 2.0 संग्रह वर्ग जैसे List<T> , Dictionary<TKey, TValue> , आदि किसी भी थ्रेड सिंक्रनाइज़ेशन प्रदान नहीं करते हैं; उपयोगकर्ता कोड को सभी सिंक्रनाइज़ेशन प्रदान करना चाहिए जब आइटम्स को जोड़ा जाता है या एक से अधिक थ्रेड्स पर समवर्ती रूप से जुड़ा हुआ है यदि आपको टाइप की सुरक्षा के साथ-साथ थ्रेड सुरक्षा की आवश्यकता होती है, तो .नेट फ्रेमवर्क में समवर्ती संग्रह वर्गों का उपयोग करें। आगे यहां पढ़ने के लिए

यदि आप पढ़ने के बारे में ध्यान रखते हैं, तो ऑब्जेक्ट्स हमेशा एक ऑर्डर में डाले जाते हैं, तो आप एक नज़र में देखेंगे

OrderedDictionary – एक पूर्णांक सूचकांक के माध्यम से मानों तक पहुंचा जा सकता है (क्रम में आइटम जो जोड़े गए थे) SortedDictionary – वस्तुओं को स्वचालित रूप से सॉर्ट किया जाता है

डिक्शनरी हैशटेबल की तुलना में तेज़ है क्योंकि शब्दकोश एक सामान्य मजबूत प्रकार है। हैशटेबल धीमी है क्योंकि यह ऑब्जेक्ट को डेटा प्रकार के रूप में लेता है जो मुक्केबाजी और अनबॉक्सिंग की ओर जाता है।