2010-04-30 18 views
7

मैं वीबीनेट में एक सामान्य शब्दकोश को क्रमबद्ध कर रहा हूं और मुझे आश्चर्य है कि यह एक आइटम के साथ लगभग 1.3kb है। क्या मैं कुछ गलत कर रहा हूं, या क्या मुझे कुछ और करना चाहिए? मेरे पास बड़ी संख्या में शब्दकोश हैं और यह उन्हें पूरे तार में भेजने के लिए मार रहा है। (जाहिर है, मोटे तौर पर 1.3kb;)) कोड मैं क्रमबद्धता के लिए उपयोगएक .NET जेनेरिक शब्दकोश इतना बड़ा क्यों है

Dim dictionary As New Dictionary(Of Integer, Integer) 
    Dim stream As New MemoryStream 
    Dim bformatter As New BinaryFormatter() 

    dictionary.Add(1, 1) 

    bformatter.Serialize(stream, dictionary) 

    Dim len As Long = stream.Length 

उत्तर

7

किसी शब्दकोश के लिए डिफ़ॉल्ट क्रमबद्धता में शब्दकोश के प्रकार, तुलना करने वाले तुलनात्मक, और प्रत्येक आइटम के प्रकार (कुंजी और मूल्य दोनों) के प्रकार के प्रकार के लिए प्रकार की जानकारी शामिल होनी चाहिए क्योंकि वे आम तौर पर उपप्रकार हो सकते हैं। प्रत्येक उपशीर्षक के लिए यह ओवरहेड जोड़ा जाना चाहिए।

\ 0 \ 0 \ 0 \ 0 ???? \ 0 \ 0 \: यदि आप एक स्ट्रिंग के रूप में डेटा मुद्रित यदि आप बाइट्स का एक बहुत ऊपर ले जा रहा पूरी तरह से योग्य प्रकार का एक बहुत देखते हैं कि देख सकते हैं 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0? System.Collections.Generic.Dictionary 2[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]\0\0\0\aVersion\bComparer\bHashSize\rKeyValuePairs\0\0\b?System.Collections.Generic.GenericEqualityComparer 1 [[System.Int32, mscorlib, संस्करण = 2.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089]] \ b सिस्टम। चयन। जेनेरिक। केवेलव्यूयर 2[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][]\0\0\0\t\0\0\0\0\0\0\t\0\0\0\0\0\0?System.Collections.Generic.GenericEqualityComparer 1 [[सिस्टम.इन्ट 32, एमएससीआरएलआईबी, संस्करण = 2.0.0.0, संस्कृति = तटस्थ, पब्लिककेट टोकन = b77a5c561934e089]] \ 0 \ 0 \ 0 \ 0 \ a \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0? System.Collections.Generic.KeyValuePair 2[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]?????System.Collections.Generic.KeyValuePair 2 [[System.Int32, mscorlib, संस्करण = 2.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089], [System.Int32 , mscorlib, संस्करण = 2.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089]] \ 0 \ 0 \ 0keyvalue \ 0 \ 0 \ b \ b \ 0 \ 0 \ 0 \ 0 \ v

आप धारावाहिकरण के लिए एक कस्टम प्रारूप का उपयोग करना पसंद कर सकते हैं, या फिर एक मानक प्रारूप जो थोड़ा हल्का है जैसे JSON

4

वहाँ भूमि के ऊपर क्रमांकन के लिए शब्दकोश की स्थापना में शामिल की एक बहुत कुछ है। हालांकि, आप पाएंगे कि आकार नाटकीय रूप से नहीं बढ़ता है क्योंकि आपके संग्रह में अधिक तत्व जोड़े जाते हैं, बशर्ते आप कुंजी और मूल्यों के लिए आदिम प्रकार का उपयोग कर रहे हों।

यह ओवरहेड मुख्य रूप से एक बार, सामने की लागत है - इसलिए एक बार जब आप डिक्शनरी श्रेणी क्रमबद्ध हो जाते हैं, तो निहित सदस्य उतना आकार नहीं जोड़ते हैं।

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