मेरे पास Dictionary<string,int>
है जिसमें 10+ मिलियन अद्वितीय कुंजी के ऊपर होने की क्षमता है। मैं अभी भी शब्दकोश की कार्यक्षमता को बनाए रखते हुए, स्मृति की मात्रा को कम करने की कोशिश कर रहा हूं।सी # शब्दकोश मेमोरी प्रबंधन
मैं के रूप में एक लंबे बजाय तार का एक हैश भंडारण का विचार था, इस (~ 1.5 गिग ~ .5 गिग करने के लिए) एक स्वीकार्य राशि के लिए क्षुधा स्मृति उपयोग कम हो जाती है, लेकिन मैं के बारे में बहुत अच्छा नहीं लग रहा है ऐसा करने के लिए मेरी विधि।
long longKey=
BitConverter.ToInt64(cryptoTransformSHA1.ComputeHash(enc.GetBytes(strKey)), 0);
मूल रूप से यह एक SHA1 हैश के अंत कांट-छांट कर, और एक लंबे, जो मैं तो एक प्रमुख के रूप में उपयोग में की पहली हिस्सा डालता है। हालांकि यह काम करता है, कम से कम उस डेटा के लिए जिसके साथ मैं परीक्षण कर रहा हूं, मुझे ऐसा नहीं लगता कि यह महत्वपूर्ण टकरावों की बढ़ती संभावना के कारण एक बहुत ही विश्वसनीय समाधान है।
क्या डिक्शनरी की मेमोरी पदचिह्न को कम करने के कोई अन्य तरीके हैं, या क्या मेरे ऊपर की विधि उतनी ही भयानक नहीं है जितनी मुझे लगता है?
[संपादित करें] स्पष्टीकरण के लिए, मुझे स्ट्रिंग का उपयोग करके शब्दकोश में निहित मान को देखने की क्षमता को बनाए रखने की आवश्यकता है। शब्दकोश में वास्तविक स्ट्रिंग को संग्रहीत करना बहुत मेमोरी तक जाता है। इसके बजाय मैं Dictionary<long,int>
का उपयोग करना चाहता हूं जहां स्ट्रिंग पर हैशिंग फ़ंक्शन का परिणाम लंबा है।
शब्दकोश? –
Diadistis
मुझे संदेह है कि टकराव की संभावना 64-बिट हैश के साथ यथार्थवादी है। –
मैं कल्पना करता हूं कि यह मामला भी हो, लेकिन आधे में बाइट्स को 'चॉपिंग' करना थोड़े iffy लगता है। –