سؤال

انا استخدم Redgate Performance Profiler لاختبار تطبيق ASP.NET MVC 2. أحد الأشياء التي اكتشفتها هي أن XMLSerializer كان يأخذ الكثير من وقت وحدة المعالجة المركزية لذلك الإشارة من هذا المشنور. لقد غيرته إلى المكان الذي تستخدمه XmlSerializerCache حاليا.

الآن لم تعد مشكلة XMLSerializer موجودة ، وأنا أقوم بتوصيف التطبيق من خلال محاكاة 80 مستخدمًا في نفس الوقت باستخدام موقع الويب مع JMeter. لذا فإن أفضل الطرق التي تستغرق وقتًا تقوم بعمل FirstOrDefault() في بعض البيانات التي أقوم بسحبها ، سأقضي على سبيل المثال-

var values=(from c in DataContext.Table1
           join s in DataContext.Table2 on new { c.Id, c.date } 
            equals new { s.Id, s.date } into list
                          where c.Id== Id && c.date == date
                          from s in list.DefaultIfEmpty()
                          select new DayDTO()
                          {
                              Points = c.points,
                              Points1 = c.points1,
                              Points2 = c.points2,
                              Points3 = c.points3,
                              Points4 = c.points4
                          }).FirstOrDefault();

هل يمكن لأي شخص أن يقترح علي ما يمكنني فعله لتحسين هذا؟ الأوقات الحالية هي 25 ثانية و 16 ثانية لأعلى 2 طريقتين .. هل هو لمجرد أنني أحاكي 80 مستخدمًا في نفس الوقت وهناك بعض المشكلات على جانب قاعدة البيانات (SQL Server 2005) مثل الجدول الكبير والفهرسة إلخ ... وسأبحث في ذلك ، لكنني أحاول حاليًا تحديد أي مشكلات تراها مع مشكلات الرمز على الجانب C# ..

سأقدر أي مساعدة شكرا!

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

المحلول

هذا يفترض أن الوقت الأعلى هو "الوقت الشامل" ، وليس "الوقت الحصري".

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

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

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

نصائح أخرى

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

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