नेट में कुछ संग्रह प्रकारों में वैकल्पिक "प्रारंभिक क्षमता" कन्स्ट्रक्टर पैरामीटर है। उदाहरण के लिए:संग्रह प्रकारों की आरंभिक क्षमता, उदा। शब्दकोश, सूची
Dictionary<string, string> something = new Dictionary<string,string>(20);
List<string> anything = new List<string>(50);
मुझे यह नहीं लगता कि एमएसडीएन पर इन वस्तुओं के लिए डिफ़ॉल्ट प्रारंभिक क्षमता क्या है।
यदि मुझे पता है कि मैं केवल एक शब्दकोश में 12 या तो आइटम संग्रहीत कर रहा हूं, तो क्या शुरुआती क्षमता को 20 की तरह सेट करने का अर्थ नहीं है?
मेरा तर्क यह मानते हुए है कि क्षमता स्ट्रिंगबिल्डर के लिए बढ़ती है, जो प्रत्येक बार क्षमता हिट होने पर दोगुनी हो जाती है, और प्रत्येक पुनर्वितरण महंगा होता है, क्यों आप जो कुछ जानते हैं उस आकार को प्री-सेट क्यों नहीं करते हैं , बस कुछ अतिरिक्त कमरे के साथ मामले में? यदि प्रारंभिक क्षमता 100 है, और मुझे पता है कि मुझे केवल एक दर्जन की आवश्यकता होगी, ऐसा लगता है कि शेष स्मृति को कुछ भी नहीं आवंटित किया गया है।
प्राइम संख्या गणना हैश टकराव और इनपुट स्थानों के लिए जांच के साथ सौदा करने की संभावना है। आंतरिक तंत्र के आधार पर यदि वे केवल प्रत्येक हैश पर एक मान संग्रहीत करते हैं तो उन्हें माध्यमिक संग्रहण स्थानों की आवश्यकता होती है। यदि आप प्राइम का उपयोग नहीं करते हैं तो आप संभावित रूप से एक हैश ढूंढ सकते हैं जिसे आप सम्मिलित करने में असफल हो सकते हैं। – Matt
शब्दकोश चेनिंग का उपयोग करता है। प्राइम नंबर टेबल आकार खराब हैश कार्यों के लिए क्षतिपूर्ति करता है। अच्छे हैश फ़ंक्शन यादृच्छिक वितरण उत्पन्न करते हैं; आधुनिक हैश तालिकाओं में दो टेबल आकारों की शक्ति का उपयोग किया जाता है (.NET हैश तालिका जावा हैश तालिका पर आधारित थी, जिसने प्राइम संख्या भी उपयोग की थी, क्योंकि यह खराब हैश कार्यों के दिनों में ऐसा करने का एक पुराना तरीका था)। चूंकि माइक्रोसॉफ्ट ने हैश संयोजन विधियों में निर्मित नहीं किया है, इसलिए कई घर-निर्मित हैश फ़ंक्शन खराब वितरण का उत्पादन करते हैं, इसलिए प्राइम नंबर पसंद क्षतिपूर्ति करता है, कभी-कभी - जब तक हैश फ़ंक्शन प्राइम संख्याओं के गुणक उत्पन्न करता है। –