سؤال

وأنا باستخدام Dictionary<> لتخزين المواد bazillion. هل هي آمنة لنفترض أنه طالما ذاكرة الخادم على مساحة كافية لاستيعاب هذه العناصر bazillion أنني سوف تحصل بالقرب O (1) استرجاع العناصر من ذلك؟ ما يجب أن تعرفه عن استخدام قاموس عام مخبأ كما هائلا عندما يكون الأداء مهم؟

وتحرير: أنا لا ينبغي الاعتماد على تطبيقات الافتراضية؟ ما الذي يجعل لوظيفة التجزئة جيدة؟

هل كانت مفيدة؟

المحلول

وهذا يعتمد، فقط حول تماما، على كيف جيدة التجزئة وظائف بك "العناصر bazillion" الدعم - إذا ظيفة التجزئة التي ليست ممتازة (حتى أن العديد من الصراعات نتيجة) سوف أدائك تتحلل مع نمو القاموس <. / P>

نصائح أخرى

ويجب قياسه ومعرفة. أنت واحد من لديه معرفة استخدام المحدد لقاموسك، لذلك كنت الشخص الذي يمكن قياسه لمعرفة ما اذا كان يلبي احتياجاتك.

ونصيحة غالية: لدي في تحليل أداء الماضي أجريت على هياكل القاموس كبيرة، واكتشفت أن الأداء لم يتراجع كما أصبح قاموس كبير للغاية. ولكن يبدو أن تتحلل هنا وهناك، وليس باستمرار في كل عملية. فعلت الكثير من العمل في محاولة لتحليل خوارزميات التجزئة، الخ، وقبل صفع نفسي في جبهته. و<م> جمع القمامة تم الحصول أبطأ لأنه كان كثيرا يعيش مجموعة العمل. كان القاموس كان سريعا كما كان دائما، ولكن إذا حدث جمع يمكن تشغيلها، فإن ذلك كان تلتهم دورات بلدي.

وهذا هو السبب في أنه من المهم أن لا تفعل اختبار الأداء في سيناريوهات معيارية غير واقعية. لمعرفة ما هي تكلفة أداء في العالم الحقيقي الخاص بك القاموس bazillion البند هي، أيضا، وهذا ستكون بوابات على الكثير من الاشياء التي لديها ما تفعله مع قاموسك شيء، مثل مقدار جمع اثار يحدث طوال ما تبقى من حياتك برنامج، ومتى.

ونعم سيكون لديك O (1) اوقات الدخول. في الواقع أن يكون متحذلق <م> ز سيكون بالضبط O (1). تحتاج إلى التأكد من أن كل ما تبذلونه من الكائنات التي يتم استخدامها كمفاتيح لديها تنفيذ GetHashCode جيد، وينبغي على الأرجح تجاوز يساوي.

وتحرير لتوضيح: في أوقات الواقع رصا سوف تحصل أبطأ وأكثر العناصر التي لديها ما لم تتمكن من تقديم "مثالية" وظيفة التجزئة

.

نعم، سيكون لديك بالقرب O (1) بغض النظر عن عدد الكائنات التي وضعت في قاموس. ولكن بالنسبة للقاموس لتكون سريعة، يجب أن لديك الكائنات الرئيسية توفير ما يكفي من GetHashCode التنفيذ، لأن قاموس يستخدم جدول هاش الداخل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top