CodeShot
Seniorسختی 3 از ۵· در 15٪ مصاحبه‌های این حوزه پرسیده شده

چرا برای سنجش کارایی کد از BenchmarkDotNet به‌جای Stopwatch دستی استفاده می‌کنیم؟

نشان کردن

پاسخ کوتاه

اندازه‌گیری دستی تحت‌تأثیر JIT Warm-up و Garbage Collection قرار می‌گیرد؛ BenchmarkDotNet این عوامل را کنترل و نتیجهٔ آماری قابل‌اعتماد می‌دهد.

پاسخ کامل

یک اجرای ساده با Stopwatch شامل زمان کامپایل JIT در همان اجرا هم می‌شود که نتیجه را مخدوش می‌کند؛ BenchmarkDotNet چندین بار کد را اجرا و Warm-up می‌کند تا فقط زمان واقعی اجرا اندازه‌گیری شود.

مثال کد

csharp\n[MemoryDiagnoser]\npublic class MyBenchmark { [Benchmark] public string Concat() => string.Concat(""a"", ""b""); }\n

اشتباه رایج

مقایسهٔ کارایی دو الگوریتم با یک اجرای Debug به‌جای Release.