दिलचस्प पोस्ट
मैप के लिए कोई ज़रूरत नहीं क्यों है डिस्पेचटिप्रॉप फ़ंक्शन यहाँ? सकारात्मक पूर्णांक में गैर शून्य बिट्स की गणना करने का फास्ट रास्ता अजगर: श्रेणी सूचकांक से बाहर की सीमा त्रुटि उद्देश्य- c iPhone प्रतिशत एक स्ट्रिंग सांकेतिक शब्दों में बदलना है? Droppable की घटना के बाहर एक jQuery ड्रैग करने योग्य वस्तु वापस अपने मूल कंटेनर पर वापस लौटें क्या सीएसएस कक्षाओं के नामों को बनाने के लिए कोई वैकल्पिक उपाय है जो संख्याओं के साथ शुरू होता है? PHP: बाहर निकलने का उपयोग (); या मरो(); शीर्षलेख के बाद ("स्थान:"); एक्सटेंशन के तरीकों को एक गैर-सामान्य स्थिर वर्ग में परिभाषित किया जाना चाहिए रीजक्स के साथ पाठ में यूयूआईडी की खोज डेटा यूआरएल पर एक छवि स्रोत सेट करना तत्काल उपलब्ध होना चाहिए? कैश एंड्रॉइड कैसे साफ़ करें जावा के लिए सर्वश्रेष्ठ XML पार्सर समाधान करने के लिए वेबपैक के साथ पथ की आवश्यकता है वेबपैक के साथ निर्देशिका बनाने के लिए स्थैतिक फ़ाइलों की प्रतिलिपि कैसे करें? क्या है और मुझे इसका उपयोग कब करना चाहिए?

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

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

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

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

वेब के समाधान से एकत्रित समाधान ".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 – वस्तुओं को स्वचालित रूप से सॉर्ट किया जाता है

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