تكرار السؤال: …
الإجابة المختصرة
تنشئ مشروع Console منفصل وتستخدم سمة [Benchmark]؛ وتقوم المكتبة بالإحماء التلقائي وعزل المعالج وقياس الزمن وتخصيصات الذاكرة بـ [MemoryDiagnoser].
الشرح
القياس اليدوي باستخدام Stopwatch يعطي نتائج مضللة وغير علمية بسبب تداخل الـ JIT compilation وتوقفات الـ GC وتقلبات تردد المعالج. تقوم أداة BenchmarkDotNet بعزل بيئة التشغيل، وتشغيل دورات إحماء (Warmup) متكررة حتى يستقر الكود في أقصى تحسين (Tier 1 JIT)، وإجراء مئات التكرارات الإحصائية وتوليد جداول دقيقة بالنانوثانية وكمية البايتات المحجوزة في الـ Heap.
مثال بالكود
[MemoryDiagnoser]
public class StringBenchmarks {
[Benchmark]
public string UsingStringBuilder() {
var sb = new StringBuilder();
for (int i = 0; i < 100; i++) sb.Append(i);
return sb.ToString();
}
}أخطاء شائعة
- تشغيل اختبارات الأداء في وضع Debug بدلاً من Release مما يعطي نتائج مشوهة لغياب تحسينات المترجم.