0.15.0
·
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--wakeLockCLI option to prevent the system from entering sleep mode while benchmarks are running (#2670) - .NET 10 support: Added
RuntimeMoniker.Net10,NativeAot10, andMono10with full toolchain support (#2642) - Box plots in ScottPlotExporter: New box plot visualization for benchmark results with improved font sizing
- RiscV64 platform support: Added
Platform.RiscV64for RISC-V 64-bit architecture (#2644, #2647) - Required properties support: Benchmark classes can now use C# 11
requiredproperties (#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.DisableParallelBuildoption to force sequential builds (#2725) - Auto-hide empty metric columns:
ThreadingDiagnoserandExceptionDiagnosernow 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
IEngineStageEvaluatorfor 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
InProcessNoEmitRunnerwith NativeAOT (#2702) - Allow ParamsAttribute values from derived classes:
ParamsAttribute.Valuessetter 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
Perfonarexporters replacingPhdexporters - 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
IlcGenerateCompleteTypeMetadataand 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],PhdJsonExporter→PerfonarJsonExporter,PhdMdExporter→PerfonarMdExporter - 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
ilcPackagesinstead of deprecatedilcPath(#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