وهو أسرع/أكثر كفاءة:القاموس<string,object> أو القاموس<enum,object>?

StackOverflow https://stackoverflow.com/questions/820200

  •  03-07-2019
  •  | 
  •  

سؤال

هي التعداد أنواع أسرع/أكثر كفاءة من سلسلة أنواع عندما تستخدم القاموس المفاتيح ؟

IDictionary<string,object> or IDictionary<enum,object>

كما واقع الأمر ، وهو نوع البيانات هو الأكثر ملاءمة باعتباره مفتاح القاموس و لماذا ؟

النظر في ما يلي: ملاحظة:فقط 5 خصائص البساطة

struct MyKeys
{
   public string Incomplete = "IN"; 
   public string Submitted = "SU"; 
   public string Processing="PR"; 
   public string Completed = "CO"; 
   public string Closed = "CL";   
}

و

enum MyKeys
{
   Incomplete, 
   Submitted, 
   Processing, 
   Completed, 
   Closed
}

مما سبق سوف تكون أفضل إذا ما استخدمت المفاتيح في القاموس!

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

المحلول

بالتأكيد enum الإصدار هو أفضل (عندما يتم تطبيقها على معنى بالطبع).ليس فقط من أجل أداء (يمكن أن يكون أفضل أو أسوأ من ذلك ، انظر Rashack جيد جدا التعليق) كما تم تجميع الوقت والنتائج في نظافة رمز.

يمكنك التحايل على comparer المشكلة باستخدام Dictionary<int, object> و الصب enum مفاتيح ints أو تحديد مخصص comparer.

نصائح أخرى

أعتقد أن عليك أن تبدأ من خلال التركيز على صحتها.هذا أهم بكثير من الحد الأدنى الفرق بين الأداء طفيفة الخلافات التي قد تحدث داخل البرنامج الخاص بك.في هذه الحالة أود أن أركز على التمثيل السليم من أنواع (enum يبدو أن يكون أفضل).ثم في وقت لاحق على ملف التطبيق الخاص بك إذا كان هناك مسألة, ثم وبعد ذلك فقط يجب عليك إصلاحه.

مما يجعل رمز أسرع وقت لاحق في هذه العملية هو عادة عملية مباشرة إلى الأمام.خذ الرابط هذا skolima المقدمة.إذا كنت قد اخترت التعداد ، كان حوالي 10 دقائق سيرا على إصلاح لإزالة المحتملة مشكلة الأداء في التطبيق الخاص بك.أريد أن أشدد على كلمة المحتملة هنا.كان هذا بالتأكيد مشكلة NHibernate ولكن ما إذا كان أو لا سيكون مشكلة البرنامج سيكون تتحدد الاستخدامات.

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

استخدام التعداد للحصول على أنظف و أجمل مدونة, ولكن تذكر أن توفير مخصص comparer إذا كنت تشعر بالقلق مع الأداء: http://ayende.com/Blog/archive/2009/02/21/dictionaryltenumtgt-puzzler.aspx .

قد لا تنطبق ولكن...

تكون على علم بأن enums هي جمعت كما الثوابت مما قد يتسبب في نقل جميع الجمعيات التي تشير enum إذا كان تغيير.(أيالثابت هو ضمني في وقت الترجمة إلى كل الجمعيات التي تستخدمها).

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

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