2010-04-30 14 views
5

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

उत्तर

2

कई अन्य वर्गों आप आप System.Collections.Generic नाम स्थान को देखकर विकल्पों की समीक्षा कर सकते हैं

तरह

से चुन सकते हैं कर रहे हैं।

उनकी एक बहुत अच्छा पोस्ट, describibg पेशेवरों और संग्रह कक्षाओं के सभी अधिकांश के लिए विपक्ष MSDN

आप इन कक्षाओं क्या प्रदान कर रहे हैं से संतुष्ट नहीं हैं, तो पर है, तो आप अपने स्वयं के संग्रह वर्ग के लिए जा सकते हैं या अपने स्वयं के custom Dictionary डिज़ाइन कर सकते हैं।

आपको अपने कस्टम डिक्शनरी फ्रोन आईडीकी इंटरफेस और अन्य कक्षाओं/इंटरफेस का उत्तराधिकारी होना होगा या सभी स्क्रैच से लिख सकते हैं।

यहाँ MSDN

[SerializableAttribute] 
[ComVisibleAttribute(false)] 
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, 
    ICollection<KeyValuePair<TKey, TValue>>, 
    IEnumerable<KeyValuePair<TKey, TValue>>, 
    IDictionary, ICollection, IEnumerable, 
    ISerializable, IDeserializationCallback 
+0

मुझे सॉर्ट करने की कोई आवश्यकता नहीं है। शब्दकोश मेरे लिए अच्छा काम करता है क्योंकि मैं कुंजी द्वारा मूल्य प्राप्त कर सकता हूं। मेरी मुख्य चिंता यह है कि शब्दकोश का आकार बढ़ सकता है। – derek

+0

मैंने आपको देखने के लिए कुछ और विकल्प दिए हैं। अपने खुद के शब्दकोश को क्यों न लें और अपने पसंदीदा नियमों को 'सही' क्यों करें? –

+0

महान लिंक। ऐसा लगता है कि मुझे एक कस्टम क्लास बनाना होगा। – derek

5

आपको अच्छे प्रदर्शन को प्राप्त करने के लिए शब्दकोश के आकार को सीमित करने की आवश्यकता नहीं है।

प्रलेखन कहते हैं:

इसकी कुंजी है का उपयोग करके एक मूल्य प्राप्त कर रहा है बहुत तेजी से, हे के पास (1) को ध्यान में रखना

+2

आप शब्दकोश असीम बढ़ने की अनुमति है, तो आप अपने सभी पता स्मृति का उपयोग हवा कर सकते हैं। हार्डवेयर पर निर्भर करते हुए, आप इससे पहले लंबे समय से स्वैपिंग के कारण प्रदर्शन समस्याओं को प्रभावित कर सकते हैं या नहीं भी कर सकते हैं। –

0

एक बात है कि जब आप प्रारंभ है एक शब्दकोश आप प्रारंभिक क्षमता निर्धारित कर सकते हैं। यदि आप जानते हैं कि आपकी सूची कितनी बड़ी होगी, तो इसे सही आकार में सेट करें और आपके पास "बर्बाद" स्थान नहीं होगा। यदि आप क्षमता निर्दिष्ट नहीं करते हैं, तो यह एक डिफ़ॉल्ट प्रारंभिक क्षमता निर्धारित करेगा और आवश्यकतानुसार आकार/आकार बढ़ाएगा, जो प्रदर्शन हिट लेता है।

+0

आकार परिवर्तनीय होगा, इसलिए इसकी वृद्धि मेरी मुख्य चिंता है। मैं अधिकतम क्षमता को सीमित करना चाहता हूं क्योंकि यह सर्वर के कैश में संग्रहीत किया जाएगा। यह एक वेब अनुप्रयोग का हिस्सा होगा। – derek

+0

प्रारंभिक आकार निर्दिष्ट करने से आकार सीमित नहीं होता है। – Rolf

1

आप शब्दकोश वर्ग से इनहेरिट अपने ही वर्ग बनाने की आवश्यकता होगी पर Dictionary class के लिए हस्ताक्षर है। प्रविष्टियों की संख्या को सीमित करने के लिए प्रविष्टियों की संख्या को सीमित करने के लिए जोड़ें और सेट आइटम विधियों को ओवरराइड करें।

1

"एक समाप्ति नीति के बिना एक कैश सिर्फ एक स्मृति रिसाव है।"

(क्षमा करें, को असंबद्ध के रूप में मैं नहीं पता है जो पहली बार यह कहा।)

+0

कैश में एक गैर-स्लाइडिंग समाप्ति नीति है, और एक निर्भरता है, बस यह सुनिश्चित करना चाहते हैं कि यह समाप्ति विंडो में बहुत बड़ा न हो। – derek

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