كيف يمكنني الحصول على قائمة عامة من DataTable مع أدنى النفقات العامة؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

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

لدي كائن مخصص يسمى الموظف. يحتوي هذا الكائن على سبعة عقارات مثل الاسم والهاتف والبريد الإلكتروني وما إلى ذلك. يوجد أيضا طاولة في قاعدة بيانات SQL الخاصة بي تسمى Tblemployees مع سبعة أعمدة تسمى بشكل مشابه إلى حد ما. هدفي هو "تحويل" النتائج من استعلام إلى قائمة عامة من كائنات الموظفين. ما هي أفضل طريقة للقيام بذلك (أدنى النفقات العامة، أسرع)؟

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

إليك ما أقوم به:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

لدي منشئ يأخذ datarow (كما هو موضح) الذي يتعامل مع "العقار = DR [" "العمود"] "

نتطلع إلى أفكارك.

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

المحلول

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

وبالتالي...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

نصائح أخرى

أي جزء من العملية تشعر بطيئة؟ منهجيةك لا تملك أي اختناقات أداء صارخ بقدر ما أستطيع رؤيته.

أود أن أقترح باستخدام أو mapper مثل LINQ2SQL أو إطار كيان

السبب في بناء قائمة هو تمر بين الوظائف على جانب الخادم.

ما هي ميزة اجتياز القائمة بدلا من اجتياز مرجع بيانات أو حتى DataTable؟

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

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

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

عادة ما يكون هذا النهج أمرا بأسرع من أي نهج يضرب قاعدة البيانات.

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