CodeShot

Job.Dry (اجرای سریع آزمایشی) در مقابل Job.Default (اجرای کامل آماری)

Job.Dry فقط یک بار Warmup و یک بار اجرای واقعی را انجام می‌دهد تا سریع مطمئن شوید بنچمارک خطا ندارد، در حالی که Job.Default طبق روش آماری کامل BenchmarkDotNet چندین Iteration گرم‌کردن و اجرای واقعی انجام می‌دهد تا نتیجه‌ای دقیق و قابل اعتماد آماری تولید کند.

ویژگیJob.Dry (اجرای سریع آزمایشی)Job.Default (اجرای کامل آماری)
زمان اجراچند ثانیهچند دقیقه
دقت آماریپایینبالا
کاربرددیباگ سریع بنچمارکگزارش نهایی کارایی

کِی از Job.Dry (اجرای سریع آزمایشی) استفاده کنیم؟

وقتی در حال نوشتن یا دیباگ کردن بنچمارک هستید و فقط می‌خواهید سریع مطمئن شوید کد کامپایل و اجرا می‌شود.

کِی از Job.Default (اجرای کامل آماری) استفاده کنیم؟

وقتی می‌خواهید نتیجه نهایی و قابل استناد برای مقایسه واقعی کارایی دو پیاده‌سازی داشته باشید.

مثال Job.Dry (اجرای سریع آزمایشی)

[SimpleJob(RunStrategy.ColdStart, launchCount: 1,
    warmupCount: 1, iterationCount: 1)]
public class QuickCheckBenchmark { ... }

مثال Job.Default (اجرای کامل آماری)

[MemoryDiagnoser]
public class StringConcatBenchmark
{
    [Benchmark] public string Concat() => "a" + "b";
}
// اجرا با: dotnet run -c Release

اشتباه رایج

اشتباه رایج اجرای بنچمارک در حالت Debug یا با Job.Dry و اعلام نتیجه به‌عنوان معیار نهایی کارایی است؛ بدون Warmup کافی و تکرار آماری، اعداد به‌شدت نویزی و غیرقابل اعتماد هستند.

جمع‌بندی

برای تست سریع صحت کد بنچمارک از Job.Dry و برای هر نتیجه‌ای که قرار است در تصمیم‌گیری واقعی استفاده شود، حتماً از اجرای کامل Job.Default در حالت Release استفاده کنید.