मैं एक हेक्से सी # लक्ष्य लिख रहा हूं, और मैं हेक्से की एसडीडी लाइब्रेरी के प्रदर्शन प्रदर्शनों का अध्ययन कर रहा हूं ताकि हम अपने क्रॉस प्लेटफ़ॉर्म कोड के माध्यम से सर्वोत्तम प्रदर्शन प्रदान कर सकें।सिस्टम। चयन। Generic.Dictionary = अंतिम प्रदर्शन?
हैश तालिका कोड के लिए एक बहुत अच्छा उदाहरण है। मैं .NET के शब्दकोश का उपयोग करने के बारे में थोड़ा अनिच्छुक था, क्योंकि यह भारी लगता है (कुंजी/मूल्य जोड़े के लिए structs मेमोरी संरेखण के मुद्दों के कारण स्मृति की एक बड़ी मात्रा ले सकता है, इसके अलावा अनावश्यक जानकारी के अलावा), और चूंकि std पर लाइब्रेरी में ऑब्जेक्ट हैश जैसी कोई चीज़ नहीं है, मैंने वास्तव में सोचा कि मैं GetHashCode को कॉल न करने के द्वारा थोड़ा प्रदर्शन निचोड़ सकता हूं, और इसे सभी के साथ इनलाइन कर सकता हूं।
यह भी स्पष्ट है कि शब्दकोश कार्यान्वयन टकराव से निपटने के लिए एक लिंक्ड सूची का उपयोग करता है, जो आदर्श से बहुत दूर है।
तो हम IntHash (शब्दकोश) हम पहले Hopscotch hashing कार्यान्वित के साथ शुरू, हमारे अपने समाधान को लागू करने के लिए शुरू कर दिया है, लेकिन यह वास्तव में ना हटे बहुत अच्छी तरह से है, लेकिन यह एक तरह से स्पष्ट है कि यह बहुत अच्छी तरह से समर्थन नहीं होता था विशाल हैश टेबल, चूंकि एच आमतौर पर एक मशीन शब्द होता है, और एच/लंबाई बढ़ता है, गरीब प्रदर्शन।
हम फिर khash -इंस्ड एल्गोरिदम लागू करने के लिए कूद गए। इसमें बहुत अधिक क्षमता थी, क्योंकि इसके मानक प्रभावशाली हैं, और यह उसी सरणी पर टकराव को संभालता है। इसमें कुछ महान चीजें भी थीं, जैसे कि हम दो बार स्मृति की आवश्यकता के बिना आकार बदलना चाहते थे।
बेंचमार्क निराशाजनक थे। बेशक, यह कहने की कोई आवश्यकता नहीं है कि शब्दकोश के मुकाबले हमारे कार्यान्वयन पर स्मृति उपयोग बहुत कम था। लेकिन मैं एक अच्छा प्रदर्शन बढ़ावा देने की उम्मीद कर रहा था, लेकिन दुर्भाग्य से यह मामला नहीं था। यह बहुत दूर नहीं था - परिमाण के क्रम से कम - लेकिन दोनों सेटों के लिए और हो जाता है, .NET के कार्यान्वयन ने अभी भी बेहतर प्रदर्शन किया है।
तो मेरा सवाल यह है: क्या हमारे पास सी # के लिए सबसे अच्छा है? मैंने किसी भी कस्टम समाधान की तलाश करने की कोशिश की, और ऐसा लगता है कि लगभग कोई नहीं है। सी 5 जेनेरिक संग्रह है, लेकिन कोड इतनी अव्यवस्थित है कि मैंने परीक्षण भी नहीं किया। और मुझे कोई बेंचमार्क भी नहीं मिला।
तो ... क्या यह है? क्या मुझे बस <> शब्दकोश के आसपास लपेटना चाहिए?
धन्यवाद !!!
शब्दकोश KeyValuePairs को स्टोर नहीं करता है। – SLaks
मैंने अनुभव किया है कि .NET संग्रह * के मैन्युअल पुन: कार्यान्वयन * शामिल कार्यान्वयन के साथ प्रतिस्पर्धा नहीं कर सकते हैं। मुझे नहीं पता कि यह क्यों है लेकिन मुझे संदेह है कि सीएलआर/जेआईटी कोड को अनुकूलित करते समय "धोखा देती है", क्योंकि इसमें .NET कंटेनर का कुछ पूर्व ज्ञान है। –
कोनराड: वास्तव में यह मेरा पसंदीदा जवाब था! :) – Waneck