محتويات الدورة

C# / المتقدم: الأعمار والتزامن وتصميم التنفيذ / الدرس 17

التحليل والأداء المقاس

حسن حملا صحيحا محدودا بأدلة المعالج والتخصيص والانتظار والاحتفاظ لا تخمين المصدر.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اختيار قياس ممثل ومرجع صحة.
  • فصل إحماء JIT والتخصيص والجمع والزمن.
  • حفظ عقود الدلالة عند خفض الكلفة.

تحديد المورد والحمل أولا

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

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

حفظ مرجع بسيط لمرشح محسن

يقارن المثال حلقة بجمع LINQ على بيانات صغيرة فيثبت فحصا محدودا لا زمنا. كلاهما عشرة. راجع التجاوز والفروق للعامة؛ قد يختلف checked للمكتبة عن حلقة unchecked. تقتصر مساواة المثال على المجال الصغير الذي ثبتت سلامة جمعه؛ راجع قواعد التجاوز قبل التعميم على كل int.

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

csharp فحص التكافؤ قبل القياس
using System;
using System.Linq;

int[] values = { 1, 2, 3, 4 };
int direct = 0;
foreach (int value in values) direct += value;
int queried = values.Sum();
if (direct != queried) throw new InvalidOperationException("sum mismatch");
Console.WriteLine($"equivalent={direct}");
الناتج المتوقع
equivalent=10

تعطي القيم الآمنة عشرة بالتنفيذين دون اختلاق توقيت.

يؤثر الإحماء وسياسة التنفيذ في القياس

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

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

مقارنة البناء دون اختلاق تسارع

يبني المثال نصا ثابتا بـStringBuilder ويفحص المحتوى، ويترك السرعة لحمل ممثل. قد تكون الاستيفاء أوJoin أوضح وفعالة للصغير؛ ليس Builder الأفضل دائما. تتحقق الرسالة هنا من النص النهائي فقط؛ لا تقدم مقارنة زمنية ولا تثبت أن StringBuilder أفضل من Join لهذا المدخل.

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

csharp استراتيجية بناء نص متحقق منها
using System;
using System.Text;

var builder = new StringBuilder();
builder.Append("A");
builder.Append("-");
builder.Append("B");
builder.Append("-");
builder.Append("C");
string result = builder.ToString();
if (result != "A-B-C") throw new InvalidOperationException("text mismatch");
Console.WriteLine(result);
الناتج المتوقع
A-B-C

يُفحص الخرج بدقة دون ادعاء عدد تخصيص أوتسارع عام.

قياس التخصيص والاحتفاظ منفصلين

تجيب counters وtrace وأدوات التفريغ والجمع أسئلة مختلفة حيث تدعم. قد يرتفع التخصيص وتصغر الحية أوالعكس مع مخبأ ضخم. تشمل العملية المكدس والأصلي والخرائط والكلفة. سم المقياس والفترة لا تحسن الذاكرة فقط. يمكن أن تخفي عبارة ذاكرة أقل زيادة في ذاكرة أصلية أو مكدسات؛ لذلك يلزم تحديد ما يقيسه كل تقرير.

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

الأخطاء الشائعة وإصلاحها

يعيد تحسين اسما بدل نسخة.

لماذا يحدث؟
قُدم عدد التخصيص على الدلالة.
كيف تصلحه؟
احفظ الملكية أوأعد العقد صراحة.
كيف تتجنب تكراره؟
اختبر التعديل والتزامن بعده.

يُعد التنقيح ادعاء سرعة إنتاج.

لماذا يحدث؟
تختلف الظروف والمراحل.
كيف تصلحه؟
قس الإصدار الممثل بتكرار.
كيف تتجنب تكراره؟
سجل الإعداد والإحماء.

تُبلغ كومة أصغر كعملية أصغر.

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

اختبر فهمك

1. يجتاز استعلام إسقاطا مكلفا ثلاثا. ما تغيير مفيد وما فحصه؟

اعرض الحل المشروح

قد يحسب تحقيق محدود الإسقاط مرة إذاطلبت النتيجة الملتقطة نفسها. افحص العمر والذاكرة والترتيب وتوقيت الرمي وعمق النسخ. قد يغير التخزين دلالة الحي؛ تحقق من العقد واحفظ اختبار تغير المصدر.

2. لماذا لا يكفي تخصيص أقل لتحسن التجميع؟

اعرض الحل المشروح

قد يزيد الاحتفاظ والمزامنة والتنظيف وخطرالبيانات ويضيف استعارة حتىالجميع. قس الإنجاز والاستجابة والاحتفاظ مع الصحة والأمن. يبطل المجمع إذا أعاد مخزنا مستخدما مهماقل العدد.

أهم ما تعلمته

  • تسبق الصحة وتكافؤالحمل مقارنة الأداء.
  • الإصدار والإحماء والإعداد مدخلات القياس.
  • تحتاج موارد التخصيص والاحتفاظ والانتظار والمعالج أدلة مختلفة.

المراجع الرسمية