Skip to content

0.15.0

Choose a tag to compare

@AndreyAkinshin AndreyAkinshin released this 22 May 15:48
· 208 commits to master since this release

BenchmarkDotNet v0.15.0 brings .NET 10 support, a new WakeLock feature to prevent system sleep during benchmarks, improved engine internals for more consistent measurements, and numerous bug fixes and improvements.

Features

  • WakeLock support: New [WakeLock] attribute and --wakeLock CLI option to prevent the system from entering sleep mode while benchmarks are running (#2670)
  • .NET 10 support: Added RuntimeMoniker.Net10, NativeAot10, and Mono10 with full toolchain support (#2642)
  • Box plots in ScottPlotExporter: New box plot visualization for benchmark results with improved font sizing
  • RiscV64 platform support: Added Platform.RiscV64 for RISC-V 64-bit architecture (#2644, #2647)
  • Required properties support: Benchmark classes can now use C# 11 required properties (#2579)
  • HostSignal.AfterProcessStart: New signal allows diagnosers to obtain the process ID of a benchmark process started in suspended state (#2674)
  • Parallel build control: New ConfigOptions.DisableParallelBuild option to force sequential builds (#2725)
  • Auto-hide empty metric columns: ThreadingDiagnoser and ExceptionDiagnoser now support configuration to hide columns when metrics have no values (#2673)
  • Measurements in DiagnoserResults: Custom diagnosers can now access measurements for calculations (#2731)

Improvements

  • Constant stack size engine refactoring: Engine stages refactored to use IEngineStageEvaluator for more consistent instruction location and simpler code (#2688)
  • Use ArtifactsPath instead of IntermediateOutputPath: Improved build artifact handling for SDK 8+ (#2676)
  • InProcessNoEmitRunner NativeAOT support: Basic support for running InProcessNoEmitRunner with NativeAOT (#2702)
  • Allow ParamsAttribute values from derived classes: ParamsAttribute.Values setter is now protected instead of private (#2716)
  • Updated clrmd to 3.1: Disassembler now uses ClrMdV3Disassembler (#2488)
  • Updated ScottPlot to 5.0.54: Plotting exporter updated to latest ScottPlot version (#2709)
  • Perfolizer upgraded to 0.5.2: CPU/OS detection logic moved to Perfolizer with new Perfonar exporters replacing Phd exporters
  • Log warnings for empty benchmarks: Clear warning messages when running benchmarks that match no methods (#2718)
  • Validation for sealed benchmark classes: Compiler now warns when benchmark classes are sealed (#2660)
  • Improved baseline warning message: More descriptive warning when baseline benchmarks are misconfigured (#2650)

Bug Fixes

  • Fix async GlobalSetup/GlobalCleanup with InProcessEmit: Async setup and cleanup methods are now properly awaited (#2109)
  • Fix Windows path too long: Handle Windows MAX_PATH limitations in build paths (#2681)
  • Fix builds with --keepFiles: Include auto-incremented ID in build artifacts directory to avoid conflicts (#2423)
  • Fix Ctrl-C handling: System state (power management, console title) is now properly reverted on process termination (#2483, #2661)
  • Fix dotnet command failure detection: Commands now always fail when dotnet returns non-zero exit code (#2535)
  • Fix deadlock in GetDotNetSdkVersion: Resolved potential deadlock in SDK version detection (#2622)
  • Fix lscpu CPU frequency parsing: Corrected frequency parsing from lscpu output
  • Make lscpu call language-invariant: CPU detection now works correctly regardless of system locale (#2577)
  • Clean up unsupported Native AOT flags: Removed obsolete IlcGenerateCompleteTypeMetadata and updated flag names (#2616)
  • Native AOT projects copy SettingsWeWantToCopy: Build settings are now properly propagated (#2665)

Breaking Changes

  • Removed ConfigCompatibilityValidator: No longer validates config compatibility between runs (#2599)
  • Phd exporters renamed to Perfonar: [PhdExporter][PerfonarExporter], PhdJsonExporterPerfonarJsonExporter, PhdMdExporterPerfonarMdExporter
  • Removed netstandard1.0 target from Annotations package: Minimum target is now netstandard2.0

Documentation

  • Added Visual Studio Profiler documentation with samples (#2672)
  • Added WakeLock documentation and samples (#2670)
  • Fixed URLs in documentation (#2705)
  • Removed obsolete API usage from articles (#2667)
  • Updated console-args.md to use ilcPackages instead of deprecated ilcPath (#2657)
  • Updated good-practices.md (#2618)

Internal

  • Bumped BenchmarkDotNet.Build dependencies
  • Updated dawidd6/action-download-artifact to v6
  • Fixed GitHub workflow for failed test reporting (#2653)
  • Fixed publish-nightly workflow failures (#2695)
  • Removed unnecessary output path properties from csproj templates (#2680)
  • Refactored dotTrace and dotMemory diagnosers into SnapshotProfilerBase
  • Fixed known high severity vulnerabilities in dependencies (#2613)
  • Updated Microsoft.CodeAnalysis.CSharp to 4.12.0 (#2686)
  • Added tests for required properties in InProcess toolchains (#2713)

Full Changelog: v0.14.0...v0.15.0