سؤال

Quandry هو - أي من الطريقين التاليين يؤدي الأفضل
الهدف - احصل على كائن Wrapper من النوع (محدد أدناه)
معايير - السرعة عبر التخزين
لا. السجلات - حوالي 1000- حوالي 2000، بحد أقصى 6K
الخيارات - إنشاء كائن على الطاير أو القيام بحث من قاموس
سرعة التنفيذ - تسمى X مرات في الثانية

NB - أحتاج إلى تقديم رمز العمل أولا ثم انتقل إلى التحسين وبالتالي، إذا كان بإمكان أي من المنظر تقديم مؤشرات خلف معلومات المشهد، سيساعد ذلك قبل أن أحصل على اختبار الأداء الفعلي ربما بواسطة EOD Thu

تعريفات -

class Wrapper  
{  
   public readonly DataRow Row;  
   public Wrapper(DataRow dr)  
   {  
      Row = dr;  
   }  
   public string ID { get { return Row["id"].ToString(); } }  
   public string ID2 { get { return Row["id2"].ToString(); } }  
   public string ID3 { get { return Row["id3"].ToString(); } }  
   public double Dbl1 { get { return (double)Row["dbl1"]; } }  
   // ... total about 12 such fields !  
}  
Dictionary<string,Wrapper> dictWrappers;  

طريقة 1

Wrapper o = new Wrapper(dr);  
/// some action with o
myMethod( o );

الطريقة 2.

Wrapper o;    
if ( ! dictWrappers.TryGetValue( dr["id"].ToString(), out o ) )    
{    
    o = new Wrapper(dr);    
    dictWrapper.Add(o.ID, o);    
}    

/// some action with o    
myMethod( o );    
هل كانت مفيدة؟

المحلول

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

مجموعتي الكود ليست معادلة تقريبا. ومع ذلك، ومع ذلك، لأن الطريقة الأولى يمكن أن تخلق العديد من التكرارات.

نصائح أخرى

  1. لا تتحسن أبدا دون التنميط أولا.
  2. أبدا ملف التعريف ما لم يكن الرمز لا يلبي المواصفات / التوقعات.
  3. إذا كنت بحاجة إلى ملف التعريف هذا الرمز، فاكتبها كلا الاتجاهين والمعارض في الحمل المتوقع.

تحرير: أحاول أن أؤيد ما يلي على التحسين ما لم يكن الأداء غير مقبول:

  • بساطة
  • مقروئية
  • قابلية الصيانة
  • القدرة على التحصيل

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

هنا مجاني أداة التنميط.

دون اختبار فعلا، أتوقع أن يكون التخزين المؤقت للقيم الحقلية في المجمع (أي، وتجنب جميع مكالمات الوصية والاستياء) من المحتمل أن يكون له تأثير على الأداء.

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

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

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

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