2010-02-16 14 views
8

मैं एसक्लाइट और बर्कले डीबी के मुकाबले तुलना करने के लिए एक कस्टम निरंतर कुंजी मूल्य प्रकार डेटा संरचना विकसित करने के बीच में हूं। वैसे भी मैंने कार्यान्वयन लिखा था, मैं इस प्रयोजनों के लिए उपयोग करने के लिए सर्वोत्तम डेटा संरचना खोजना चाहता था। मैंने एक जोड़े को देखा:.net शब्दकोश अन्य प्रबंधित कस्टम डेटा संरचनाओं बनाम, .NET शब्दकोश इतनी तेज़ क्यों है?

  • एक ओपन सोर्स रेडब्लैक पेड़।
  • मोनो शब्दकोश कार्यान्वयन।

मैं चाहता था कि मैंने डेटाटाइक्चर को .NET डिक्शनरी से तुलनात्मक प्रदर्शन संख्याओं के लिए चुना है।

मैं आवेषण के लिए 500k पुनरावृत्तियों के साथ पाश के लिए एक साधारण परीक्षण का इस्तेमाल किया और आवेषण और कुंजी नज़र अप को मापने के लिए स्टॉपवॉच का प्रयोग किया:

मैं देखा कि

  • बर्कली डीबी कुंजी देखने बार एक ही के बारे में था शब्दकोश के रूप में।
  • मैंने सी 5 शब्दकोष, एक रेडब्लैक पेड़ कार्यान्वयन और यहां तक ​​कि मोनो के शब्दकोश कार्यान्वयन के लिए लूप परीक्षण के लिए मेरी कोशिश की।

समय सम्मिलित करें: .NET शब्दकोश से 7% धीमी है।
लुकअप समय: .net शब्दकोश से 1000% धीमी है। यह स्क्लेइट के साथ देखो गति से भी धीमी है !! मैंने संकलक अनुकूलन के साथ परीक्षण करने का प्रयास किया और अभी भी इसी तरह के परिणाम मिल गए।

मुझे एहसास है कि मैं हैशटेबल्स बनाम पेड़ इत्यादि की तुलना कर रहा हूं, लेकिन मैं सभी डेटा संरचनाओं के बीच प्रदर्शन विसंगति के रूप में फंस गया।

किसी किसी भी विचार

उत्तर

4

दो विचार किया है:

  1. आप आपने अनजाने में अपने परीक्षणों में JIT समय शामिल नहीं कर रहे हैं यह सुनिश्चित करना चाहिये - इस परिणाम के लिए समय की एक पर्याप्त राशि जोड़ सकते हैं। आपको एक ही निष्पादन में दो रन करना चाहिए और पहले रन को छोड़ देना चाहिए।

  2. आपको यह सुनिश्चित करना चाहिए कि आप डीबगर के तहत नहीं चल रहे हैं - यह प्रदर्शन परिणामों को नाटकीय रूप से स्कू कर सकता है।

इसके अलावा, आप जो भी प्रदर्शन अंतर देखते हैं, वह हैश टेबल और पेड़ के बीच प्रदर्शन में अंतर का परिणाम हो सकता है। एक वृक्ष संरचना में आमतौर पर ओ (एन * लॉग (एन)) लुकअप के लिए औसतन प्रदर्शन होता है। एक संतुलित पेड़ ओ को कम कर सकता है (लोन (एन))। इस बीच, हैशटेबल, ओश टकराव से बचाए जाने पर लुकअप के लिए ओ (1) समय तक पहुंच सकते हैं।

मैं यह भी कल्पना करूंगा कि .NET शब्दकोश वर्ग अत्यधिक अनुकूलित है क्योंकि यह .NET में कई अलग-अलग चीजों के लिए एक रोटी और मक्खन डेटा संरचना है। इसके अलावा, एक सामान्य शब्दकोश <> मुक्केबाजी से बचने में सक्षम हो सकता है, और इसलिए आप उससे कुछ प्रदर्शन अंतर देख सकते हैं।

+0

मैंने जेआईटी प्रभावों के बारे में नहीं सोचा अच्छा बिंदु –

+0

यही था, यह जेआईटी था! कुछ ऐसा जो मैंने नहीं सोचा था। मैंने परीक्षण को कई पुनरावृत्तियों को निष्पादित किया और मोनो शब्दकोश का प्रदर्शन अपेक्षाकृत .NET शब्दकोश के समान था। धन्यवाद। Gratuitous HGTG संदर्भ के लिए –

1

डेटा के आधार पर डेटा संरचना और भंडार चुनें। उस ने कहा, कोई सही डेटा संरचना नहीं है। जबकि .NET Dictionary<,> अच्छी तरह अनुकूलित है क्योंकि यह अक्सर एक अच्छी पसंद है, यह सभी समस्याओं का उत्तर नहीं है - यह 42 होगा ...

+0

+1। – SirDemon

2

यदि आपको केवल एक लुकअप की ज़रूरत है, तो एक लाल/काला पेड़ आपकी सबसे अच्छी डेटा संरचना नहीं होगी। यह सॉर्टिंग प्रदान करता है, जो हमेशा हैशटेबल लुकअप से धीमा होने वाला है। यदि आप तुलनात्मक सी 5 डेटा संरचना के साथ .net शब्दकोश की तुलना करना चाहते हैं, तो आप C5.HashDictionary का उपयोग करेंगे।

संबंधित मुद्दे