Full ChangeLog
BenchmarkDotNet v0.14.0
Highlights
- Introduce
BenchmarkDotNet.Diagnostics.dotMemory
#2549: memory allocation profile of your benchmarks using dotMemory, see BenchmarkDotNet.Samples.IntroDotMemoryDiagnoser - Introduce
BenchmarkDotNet.Exporters.Plotting
#2560: plotting via ScottPlot (initial version) - Multiple bugfixes
- The default build toolchains have been updated to pass
IntermediateOutputPath
,OutputPath
, andOutDir
properties to thedotnet build
command. This change forces all build outputs to be placed in a new directory generated by BenchmarkDotNet, and fixes many issues that have been reported with builds. You can also access these paths in your own.csproj
and.props
from those properties if you need to copy custom files to the output.
Bug fixes
- Fixed multiple build-related bugs including passing MsBuildArguments and .Net 8's
UseArtifactsOutput
.
Breaking Changes
DotNetCliBuilder
removedretryFailedBuildWithNoDeps
constructor option.DotNetCliCommand
removedRetryFailedBuildWithNoDeps
property andBuildNoRestoreNoDependencies()
andPublishNoBuildAndNoRestore()
methods (replaced withPublishNoRestore()
).
Milestone details
In the v0.14.0 scope, 17 issues were resolved and 28 pull requests were merged. This release includes 55 commits by 16 contributors.
Resolved issues (17)
- #946 Copy to $(OutDir) does not copy to benchmarkdotnet output folder (assignee: @timcassell)
- #1270 Docs for SummaryStyle
- #1377 Forward msbuild properties to project reference (assignee: @timcassell)
- #1457 Directory.Build.props hijacking generated csproj output path (assignee: @timcassell)
- #1595 ValueTask-returning benchmarks are not being called correctly (assignee: @timcassell)
- #1795 'BenchmarkDotNet.Autogenerated\project.assets.json' not found. (assignee: @timcassell)
- #2253 TaskbarProgressCom is not supported when benchmarking Native AOT
- #2310 Bug: Getting an error loading BenchmarkDotNet.Diagnostics.Windows.dll for a benchmark that is not windows specific
- #2366
default(object)
takes more time than expected in net7.0 - #2466 Add support for
true (assignee: @timcassell) - #2477 MSBuild Params Not Applied to Benchamrk (assignee: @timcassell)
- #2524 Reference assemblies are searched in the wrong location
- #2540 Unable to use
wasm
ormonoaotllvm
as runtime (assignee: @LoopedBard3) - #2542 InvalidMeasurementUnitException when using
--statisticalTest
argument when comparing private builds (assignee: @AndreyAkinshin) - #2545 HideColumns + custom corerun = incorrect table markdown
- #2554 Question about visibility of DotTraceDiagnoser's second constructor (assignee: @AndreyAkinshin)
- #2570 BenchmarkDotNet test adapter not running tests with dotnet test
Merged pull requests (28)
- #2108 Fix consume ValueTask backed by IValueTaskSource (by @timcassell)
- #2255 Fix TaskbarProgress (by @timcassell)
- #2374 stackalloc in separate method (by @timcassell)
- #2393 Fix
MsBuildArgument
s (by @timcassell) - #2498 Enhance Diagnoser Loading Behavior for Non-Critical Assemblies (by @MattFromRVA)
- #2500 Mark test adapter entry points as autogenerated (by @molesmoke)
- #2503 Update MsBuildErrorMapper (by @timcassell)
- #2504 Fix some tests (by @timcassell)
- #2510 Docs for SummaryStyle (by @MattFromRVA)
- #2517 fix: Spelling mistake (by @BenjaminMichaelis)
- #2522 Fix benchmarks with same class but different namespace having same ID (by @caaavik-msft)
- #2523 .Net SDK Validation (by @MattFromRVA)
- #2525 Update toolchain docs (by @MattFromRVA)
- #2526 Bump Octokit version (by @adamsitnik)
- #2531 Fix wasm toolchain (by @timcassell)
- #2532 Add Integration Test for WASM (by @caaavik-msft)
- #2534 Update Microsoft.Diagnostics.Tracing.TraceEvent (by @sbomer)
- #2538 Add support for wasm and Mono AOT LLVM monikers to SDK Validator (by @caaavik-msft)
- #2539 Fix Mono AOT LLVM (by @caaavik-msft)
- #2541 Add Wasm and MonoAOTLLVM to DotNetSdkVersionValidator (by @LoopedBard3)
- #2549 DotMemoryDiagnoser implementation (by @martinothamar)
- #2560 Initial ScottPlotExporter with just Bar Plot and Unit Tests (by @FlatlinerDOA)
- #2565 Fix - incorrect table markdown #2545 (by @AumkarGorde)
- #2566 Fix names of instructions sets for PublishAot scenarios (by @MichalStrehovsky)
- #2571 Fix BenchmarkDotNet test adapter not running tests with dotnet test (by @sheffer21)
- #2572 Add Support for Warning Logging and Integrate with Visual Studio Test Logging (by @sheffer21)
- #2583 Updated readme to make it clear that experienced performance engineers are also welcome (by @iCodeSometime)
- #2605 fix(CI): Deprecation issues (by @workgroupengineering)
Commits (55)
- f8ac9c Set next BenchmarkDotNet version: 0.13.13 (by @AndreyAkinshin)
- 5dd1a9 [docs] Update cSpell.json (by @AndreyAkinshin)
- 7dacb1 [docs] Update cSpell.json (by @AndreyAkinshin)
- aa85d8 Added new Exception (by @MattFromRVA)
- e8cf48 Update copyright year (by @AndreyAkinshin)
- 688913 [build] Bump .NET SDK: 8.0.100 -> 8.0.101 (by @AndreyAkinshin)
- 3cf7b8 [build] Reduce verbosity of RestoreTask (by @AndreyAkinshin)
- 96d8f5 [docs] Update vstest.md (by @AndreyAkinshin)
- cf14d5 Mark test adapter entry points as autogenerated (by @jeremy-visionaid)
- 570eee [build] Bump Docfx.App: 2.74.1->2.75.0 (by @AndreyAkinshin)
- c4c204 Fixed some tests. (by @timcassell)
- f32166 Update MsBuildErrorMapper. (by @timcassell)
- d2f690 Update tests. (by @timcassell)
- 1d95e5 [build] Bump Docfx.App: 2.75.0->2.75.1 (by @AndreyAkinshin)
- e6fdc6 Pass
OutputPath
,IntermediateOutputPath
,OutDir
properties todotnet
... (by @timcassell) - 33e9e9 fix: Spelling mistake (by @BenjaminMichaelis)
- 109528 Fix benchmarks with same class but different namespace having same ID (#2522) (by @caaavik-msft)
- c20fd5 Update toolchain docs (#2525) (by @MattFromRVA)
- 0a41e1 Bump Octokit version (by @adamsitnik)
- 863165 Fix wasm toolchain (#2531) (by @timcassell)
- f4c39e Update Microsoft.Diagnostics.Tracing.TraceEvent (#2534) (by @sbomer)
- 59647c .Net SDK Validation (#2523) (by @MattFromRVA)
- f17d40 Add support for wasm and Mono AOT LLVM monikers to SDK Validator (#2538) (by @caaavik-msft)
- 443579 Add Integration Test for WASM (#2532) (by @caaavik-msft)
- b5fc05 [build] Make build.sh more portable (by @AndreyAkinshin)
- 63626b [tests] Add docs for WasmTests (by @AndreyAkinshin)
- 9a9d7e Fix Mono AOT LLVM (#2539) (by @caaavik-msft)
- 3305b3 Add System.Runtime.CompilerServices.Unsafe to BenchmarkDotNet.Tests (by @AndreyAkinshin)
- 306210 Bump Perfolizer: 0.2.1->0.3.16 (by @AndreyAkinshin)
- 036f46 Add Wasm and MonoAOTLLVM to DotNetSdkVersionValidator (#2541) (by @LoopedBard3)
- ad0240 Bump Perfolizer: 0.3.16->0.3.17 (by @AndreyAkinshin)
- 7a1c10 Fix bugs in statistical tests, fix #2542 (by @AndreyAkinshin)
- 0d3099 Fix StatisticalTestColumnTests.NoDifferenceIfValuesAreTheSame (by @AndreyAkinshin)
- 7306ee Fix consume ValueTask backed by IValueTaskSource (#2108) (by @timcassell)
- 4ab69b Moved stackalloc to separate method. (#2374) (by @timcassell)
- c7b7ab DotMemoryDiagnoser implementation (#2549) (by @martinothamar)
- 55ce92 Bump JetBrains.Profiler.SelfApi: 2.5.0->2.5.2 (by @AndreyAkinshin)
- a24d68 Fix DotTrace/DotMemory attribute ctors, fix #2554 (by @AndreyAkinshin)
- d98a1d Fix names of instructions sets for PublishAot scenarios (#2566) (by @MichalStrehovsky)
- 205ce6 Fix - incorrect table markdown #2545 (#2565) (by @AumkarGorde)
- 063d2f Fix BenchmarkDotNet test adapter not running tests with dotnet test (#2571) (by @sheffer21)
- 6a7244 Add warning support (#2572) (by @sheffer21)
- 01d9b7 Update README.md (#2583) (by @iCodeSometime)
- 20e2ee Docs for SummaryStyle (#2510) (by @MattFromRVA)
- e933bb Initial ScottPlotExporter with just Bar Plot and Unit Tests (#2560) (by @FlatlinerDOA)
- f8082a Fix IntroSummaryStyle compilation (by @AndreyAkinshin)
- 834417 Improve logging in ScottPlotExporterTests (by @AndreyAkinshin)
- 15200d [build] Add BenchmarkDotNet.Exporters.Plotting.Tests to unit-tests (by @AndreyAkinshin)
- 027564 Fixed crash from TaskbarProgress when BuiltInComInteropSupport is disabled. ... (by @timcassell)
- bf0a49 fix(CI): Deprecation issues (#2605) (by @workgroupengineering)
- 3d34ed Bump JetBrains.Profiler.SelfApi: 2.5.2->2.5.9 (by @AndreyAkinshin)
- 23e6c5 Fix InvalidOperationException in DotMemoryDiagnoser (by @AndreyAkinshin)
- b3fbe7 Set next BenchmarkDotNet version: 0.14.0 (by @AndreyAkinshin)
- 17cf3b [docs] Prepare v0.14.0 changelog (by @AndreyAkinshin)
- cf882d Add macOS Sequoia in OsBrandStringHelper (by @AndreyAkinshin)
Contributors (16)
- Adam Sitnik (@adamsitnik)
- Alon Sheffer (@sheffer21)
- Andrew Chisholm (@FlatlinerDOA)
- Andrey Akinshin (@AndreyAkinshin)
- Benjamin Michaelis (@BenjaminMichaelis)
- Cameron Aavik (@caaavik-msft)
- Jeremy Powell (@jeremy-visionaid)
- Kenneth Cochran (@iCodeSometime)
- Martin Othamar (@martinothamar)
- Matt Chaulklin (@MattFromRVA)
- Michal Strehovský (@MichalStrehovsky)
- Omkar Gorde (@AumkarGorde)
- Parker Bibus (@LoopedBard3)
- Sven Boemer (@sbomer)
- Tim Cassell (@timcassell)
- workgroupengineering (@workgroupengineering)
Thank you very much!
Additional details
Date: August 06, 2024
Milestone: v0.14.0 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.14.0
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.14.0
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotMemory/0.14.0
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.14.0
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.14.0
- https://www.nuget.org/packages/BenchmarkDotNet.Exporters.Plotting/0.14.0
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.14.0
- https://www.nuget.org/packages/BenchmarkDotNet.TestAdapter/0.14.0
BenchmarkDotNet v0.13.12
Highlights
The biggest highlight of this release if our new VSTest Adapter, which allows to run benchmarks as unit tests in your favorite IDE! The detailed guide can be found here.
This release also includes to a minor bug fix that caused incorrect job id generation: fixed job id generation (#2491).
Also, the target framework in the BenchmarkDotNet templates was bumped to .NET 8.0.
Milestone details
In the v0.13.12 scope, 3 issues were resolved and 4 pull requests were merged. This release includes 12 commits by 4 contributors.
Resolved issues (3)
- #2473 Custom
SimpleJob
Id ignored when theMinIterationTime
attribute is used. - #2492 Packing of BenchmarkDotNet.TestAdapter is broken (assignee: @AndreyAkinshin)
- #2494 Rider and R# do not distinguish parametrized TestAdapter cases (assignee: @AndreyAkinshin)
Merged pull requests (4)
- #2438 Add a VSTest Adapter (by @caaavik-msft)
- #2490 Update the default framework on the templates to net8.0 (by @julesrx)
- #2491 [Bug Fix] Custom SimpleJob Id ignored (by @MattFromRVA)
- #2493 Fix BenchmarkDotNet.TestAdapter packability (by @AndreyAkinshin)
Commits (12)
- d49417 Set next BenchmarkDotNet version: 0.13.12 (by @AndreyAkinshin)
- b3b2d9 Add Sponsors to README (by @AndreyAkinshin)
- 91f3f7 Add a VSTest Adapter (#2438) (by @caaavik-msft)
- 41b23b Update default framework version to net8.0 (LTS) (by @julesrx)
- 5c4653 [build] Bump Octokit: 9.0.0->9.1.0 (by @AndreyAkinshin)
- 8b6bad [build] In the release workflow, automatically generate an announcement discu... (by @AndreyAkinshin)
- 9f7492 [build] Add test-pack job in run-tests workflow, see #2492 (by @AndreyAkinshin)
- b67b6b Update pack files layout for BenchmarkDotNet.TestAdapter, fix #2492 (by @AndreyAkinshin)
- 06fb24 Use different FQNs for parameterized cases in TestAdapter, fix #2494 (by @AndreyAkinshin)
- 299095 [Bug Fix] Custom SimpleJob Id ignored (#2491) (by @MattFromRVA)
- 0159b8 [docs] Update vstest (by @AndreyAkinshin)
- cdce32 Prepare v0.13.12 changelog (by @AndreyAkinshin)
Contributors (4)
- Andrey Akinshin (@AndreyAkinshin)
- Cameron Aavik (@caaavik-msft)
- Jules Raffoux (@julesrx)
- Matt Chaulklin (@MattFromRVA)
Thank you very much!
Additional details
Date: January 05, 2024
Milestone: v0.13.12 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.12
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.12
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.13.12
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.12
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.12
- https://www.nuget.org/packages/BenchmarkDotNet.TestAdapter/0.13.12
BenchmarkDotNet v0.13.11
Highlights
Small improvements.
Milestone details
In the v0.13.11 scope, 4 issues were resolved and 8 pull requests were merged. This release includes 28 commits by 7 contributors.
Resolved issues (4)
- #2060 NativeAOT benchmark started from .Net Framework host doesn't have all intrinsics enabled (assignee: @adamsitnik)
- #2233 Q: Include hardware counters in XML output (assignee: @nazulg)
- #2388 Include AVX512 in listed HardwareIntrinsics
- #2463 Bug. Native AOT .NET 7.0 doesn't work. System.NotSupportedException: X86Serialize (assignee: @adamsitnik)
Merged pull requests (8)
- #2412 Add HardwareIntrinsics AVX-512 info (by @nietras)
- #2458 Adds Metrics Columns to Benchmark Report Output (by @nazulg)
- #2459 Enable MemoryDiagnoser on Legacy Mono (by @MichalPetryka)
- #2462 update SDK to .NET 8 (by @adamsitnik)
- #2464 Use "native" for .NET 8, don't use "serialize" for .NET 7 (by @adamsitnik)
- #2465 fix NativeAOT toolchain and tests (by @adamsitnik)
- #2468 Add OperationsPerSecondAttribute (by @DarkWanderer)
- #2475 Fix some tests (by @timcassell)
Commits (28)
- bb55e6 Set next BenchmarkDotNet version: 0.13.11 (by @AndreyAkinshin)
- db4d8b Adds Metrics Columns to Benchmark Report Output (#2458) (by @nazulg)
- e93b2b Use "native" for .NET 8, don't use "serialize" for .NET 7 (#2464) (by @adamsitnik)
- 127157 [build] Fix spellcheck-docs workflow (by @AndreyAkinshin)
- 8a02ec [build] Use our .NET SDK on Windows (by @AndreyAkinshin)
- 1b39e8 Suppress NU1903 in IntegrationTests.ManualRunning.MultipleFrameworks (by @AndreyAkinshin)
- e90311 update SDK to .NET 8 (#2462) (by @adamsitnik)
- fc7afe Enable MemoryDiagnoser on Legacy Mono (#2459) (by @MichalPetryka)
- 630622 fix NativeAOT toolchain and tests (#2465) (by @adamsitnik)
- 536a28 Add HardwareIntrinsics AVX-512 info (#2412) (by @nietras)
- 3fa045 Add OperationsPerSecondAttribute (#2468) (by @DarkWanderer)
- 0583cb Bump Microsoft.NETCore.Platforms: 5.0.0->6.0.0 (by @AndreyAkinshin)
- 2e62b9 Remove netcoreapp2.0;net461 from TFMs for IntegrationTests.ManualRunning.Mult... (by @AndreyAkinshin)
- 92fa3f Bump xunit: 2.5.0->2.6.2 (by @AndreyAkinshin)
- 01e220 Bump xunit.runner.visualstudio: 2.5.0->2.5.4 (by @AndreyAkinshin)
- 29a94c Bump Verify.Xunit: 20.3.2->20.8.2 (by @AndreyAkinshin)
- 538e0e Bump Microsoft.NET.Test.SDK: 17.6.2->17.8.0 (by @AndreyAkinshin)
- 136e4b Remove explicit Microsoft.NETFramework.ReferenceAssemblies reference in Bench... (by @AndreyAkinshin)
- 423b84 [build] Bump Docfx.App: 2.71.1->2.74.0 (by @AndreyAkinshin)
- 718953 [build] Bump Octokit: 7.0.0->9.0.0 (by @AndreyAkinshin)
- 0cce91 [build] Bump Cake.Frosting: 3.2.0->4.0.0 (by @AndreyAkinshin)
- 4d5dc9 Fix Newtonsoft.Json v13.0.1 in BenchmarkDotNet.IntegrationTests (by @AndreyAkinshin)
- c7ec60 Enable UserCanSpecifyCustomNuGetPackageDependency test on Linux (by @AndreyAkinshin)
- a572db Bump C# LangVersion: 11.0->12.0 (by @AndreyAkinshin)
- b4ac9d Nullability cleanup (2023-11-26) (by @AndreyAkinshin)
- 5557ae [build] Bump Docfx.App: 2.74.0->2.74.1 (by @AndreyAkinshin)
- b987b9 Fixed some tests. (#2475) (by @timcassell)
- 05eb00 Prepare v0.13.11 changelog (by @AndreyAkinshin)
Contributors (7)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Michał Petryka (@MichalPetryka)
- Nazul Grimaldo (@nazulg)
- nietras (@nietras)
- Oleg V. Kozlyuk (@DarkWanderer)
- Tim Cassell (@timcassell)
Thank you very much!
Additional details
Date: December 06, 2023
Milestone: v0.13.11 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.11
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.11
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.13.11
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.11
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.11
BenchmarkDotNet v0.13.10
Highlights
Initial support of .NET 9 and minor bug fixes.
Milestone details
In the v0.13.10 scope, 2 issues were resolved and 3 pull requests were merged. This release includes 10 commits by 4 contributors.
Resolved issues (2)
- #2436 BenchmarkDotNet Access Denied Error on WSL2 when Writing to '/mnt/c/DumpStack.log.tmp' (assignee: @AndreyAkinshin)
- #2455 .NET 9 support (assignee: @adamsitnik)
Merged pull requests (3)
- #2447 Add support for wasm/net9.0 (by @radical)
- #2453 feat: set RuntimeHostConfigurationOption on generated project (by @workgroupengineering)
- #2456 implement full .NET 9 support (by @adamsitnik)
Commits (10)
- c27152 Set next BenchmarkDotNet version: 0.13.10 (by @AndreyAkinshin)
- 2e96d2 Don't show AssemblyInformationalVersion metadata in BDN BrandVersion (by @AndreyAkinshin)
- d17c6a Support Windows 11 23H2 (10.0.22631) in OsBrandStringHelper (by @AndreyAkinshin)
- af9c5c Exception handling in DotNetCliGenerator.GetRootDirectory, fix #2436 (by @AndreyAkinshin)
- e11136 [build] Bump Docfx.App: 2.71.0->2.71.1 (by @AndreyAkinshin)
- 7b342f Add support for wasm/net9.0 (#2447) (by @radical)
- e17068 Adjust 'Failed to set up high priority' message (by @AndreyAkinshin)
- 0a734a feat: set RuntimeHostConfigurationOption on generated project (#2453) (by @workgroupengineering)
- ae4914 implement full .NET 9 support (#2456) (by @adamsitnik)
- 40c414 Prepare v0.13.10 changelog (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Ankit Jain (@radical)
- workgroupengineering (@workgroupengineering)
Thank you very much!
Additional details
Date: November 01, 2023
Milestone: v0.13.10 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.10
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.10
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.13.10
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.10
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.10
BenchmarkDotNet v0.13.9
Highlights
This release contains bug fixes.
Milestone details
In the v0.13.9 scope, 3 issues were resolved and 7 pull requests were merged. This release includes 26 commits by 5 contributors.
Resolved issues (3)
- #2054 Custom logging/visualization during the benchmark run (assignee: @caaavik-msft)
- #2404 Using
DisassemblyDiagnoser
in GitHub Actions (assignee: @timcassell) - #2432 Something went wrong with outliers when using
--launchCount
(assignee: @AndreyAkinshin)
Merged pull requests (7)
- #1882 use coalesce instead of join (by @askazakov)
- #2413 Fix linux crash from disassembler (by @timcassell)
- #2420 Add event processor functionality (by @caaavik-msft)
- #2421 More nullability warnings fixes (by @alinasmirnova)
- #2433 Fix build errors with latest sdk (by @timcassell)
- #2434 Fix Event Processors not being copied in ManualConfig.Add (by @caaavik-msft)
- #2435 Treat warnings not as errors in manual test project (by @timcassell)
Commits (26)
- ece5cc Set next BenchmarkDotNet version: 0.13.9 (by @AndreyAkinshin)
- ad9376 Add event processor functionality (#2420) (by @caaavik-msft)
- 8227bb Address PR feedback (#2434) (by @caaavik-msft)
- 46b3c0 Fix linux crash from disassembler (#2413) (by @timcassell)
- 967a97 Fix build errors with latest sdk. (#2433) (by @timcassell)
- dd7a9b Treat warnings not as errors in manual test project (#2435) (by @timcassell)
- 583874 Print full stacktrace for GenerateException, see #2436 (by @AndreyAkinshin)
- 6e3a15 Support WSL detection in RuntimeInformation (by @AndreyAkinshin)
- 8986e0 Update myget url in README (by @AndreyAkinshin)
- 516bd6 Enabled nullability for BenchmarkDotNet.Diagnostics.dotTrace.csproj (by @alinasmirnova)
- 5428eb Fixed nullability warnings in methods signatures (by @alinasmirnova)
- 7fbbc9 Removed CanBeNull attribute (by @alinasmirnova)
- 9d7350 Fixed warnings on null assignments (by @alinasmirnova)
- b43d28 Fixed warnings in EngineEventLogParser (by @alinasmirnova)
- 148165 Removed an unnecessary check (by @alinasmirnova)
- 465aaf Fixed empty catch warning (by @alinasmirnova)
- 9a7bb7 [build] Bump: Microsoft.DocAsCode.App 2.67.5 -> Docfx.App 2.71.0 (by @AndreyAkinshin)
- 9dd7b6 Fix license badge link in README (by @AndreyAkinshin)
- 134b8e [build] Automatic NextVersion evaluation (by @AndreyAkinshin)
- 8090d9 Suppress NETSDK1138 (TFM out of support warning) (by @AndreyAkinshin)
- af610e Bump .NET SDK: 7.0.305->7.0.401 (by @AndreyAkinshin)
- 8838ed [build] Fix docfx build warnings (by @AndreyAkinshin)
- 2d379b Remove outlier consistency check, fix #2432 (by @AndreyAkinshin)
- 00628a use coalesce instead of join (by @askazakov)
- 411a6e Prepare v0.13.9 changelog (by @AndreyAkinshin)
- 228a46 Rollback docfx.json (by @AndreyAkinshin)
Contributors (5)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin (@AndreyAkinshin)
- askazakov (@askazakov)
- Cameron Aavik (@caaavik-msft)
- Tim Cassell (@timcassell)
Thank you very much!
Additional details
Date: October 05, 2023
Milestone: v0.13.9 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.9
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.9
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.13.9
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.9
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.9
BenchmarkDotNet v0.13.8
Highlights
This release contains important bug fixes.
Milestone details
In the v0.13.8 scope, 5 issues were resolved and 9 pull requests were merged. This release includes 15 commits by 8 contributors.
Resolved issues (5)
- #1995 Left Justification option for summary table columns
- #2394 Multiple MarkdownExporters not possible (assignee: @bstordrup)
- #2399 Custom MarkdownExporter (assignee: @nietras)
- #2400 Should StreamLogger be TextWriterLogger? (assignee: @nietras)
- #2405 0.13.7 BenchmarkDotNet.Autogenerated project fails build (assignee: @timcassell)
Merged pull requests (9)
- #2395 Issue2394 multiple markdown exporters not possible even with different names (by @bstordrup)
- #2406 Refactor out base TextLogger from StreamLogger (by @nietras)
- #2407 Make MarkdownExporter ctor and Dialect protected (by @nietras)
- #2409 Default to RoslynToolchain (by @timcassell)
- #2410 feat: add text justification style (by @Vahdanian)
- #2415 - update the templates install command to reflect dotnet cli updates (by @baywet)
- #2416 Update stub decoding for .NET 8 for disassemblers (by @janvorli)
- #2418 Enable nullability for BenchmarkDotNet.Annotations (by @alinasmirnova)
- #2419 Nullability In BenchmarkDotNet project (by @alinasmirnova)
Commits (15)
- e1122c Set next BenchmarkDotNet version: 0.13.8 (by @AndreyAkinshin)
- b2235a [build] Remove explicit snupkg pushing (by @AndreyAkinshin)
- 2c999b [build] Fix ReleaseTask console help info (by @AndreyAkinshin)
- d058c7 Issue2394 multiple markdown exporters not possible even with different names ... (by @bstordrup)
- 9da449 Make MarkdownExporter ctor and Dialect protected (#2407) (by @nietras)
- c35dcb Refactor out base TextLogger from StreamLogger (#2406) (by @nietras)
- e0c667 - update the templates install command to reflect dotnet cli updates (#2415) (by @baywet)
- d39108 Update stub decoding for .NET 8 for disassemblers (#2416) (by @janvorli)
- 2d763c Enable nullability for BenchmarkDotNet.Annotations (by @alinasmirnova)
- 83fc5e Updated CodeAnnotations to the actual version (by @alinasmirnova)
- 3860e4 Removed redundant check (by @alinasmirnova)
- 2a8bab Fixed nullability warnings for some files from BenchmarkDotNet project (by @alinasmirnova)
- b035d9 feat: add text justification style (#2410) (by @Vahdanian)
- e2e888 Use Roslyn Toolchain by default if no build settings are changed. (by @timcassell)
- f8de1e Prepare v0.13.8 changelog (by @AndreyAkinshin)
Contributors (8)
- Alina Smirnova (@alinasmirnova)
- AmirHossein Vahdanian (@Vahdanian)
- Andrey Akinshin (@AndreyAkinshin)
- Benny Tordrup (@bstordrup)
- Jan Vorlicek (@janvorli)
- nietras (@nietras)
- Tim Cassell (@timcassell)
- Vincent Biret (@baywet)
Thank you very much!
Additional details
Date: September 08, 2023
Milestone: v0.13.8 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.8
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.8
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.13.8
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.8
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.8
BenchmarkDotNet v0.13.7
Highlights
This release contains important bug fixes listed below.
Milestone details
In the v0.13.7 scope, 12 issues were resolved and 13 pull requests were merged. This release includes 38 commits by 9 contributors.
Resolved issues (12)
- #1773 Ability to recompile for each target runtime
- #2311 Detect when MonoAOT compilation fails and abort the benchmark run
- #2346 Can't use latest version of BenchmarkDotNet
- #2356 Add tests for expected results (assignee: @timcassell)
- #2364 Benchmark project using paket dependency manager fails to build auto-generated projects (assignee: @timcassell)
- #2369 Unable to use variables for PackageReferences after #2347
- #2373 Regression in parsing arguments with spaces (assignee: @kant2002)
- #2377 Multiple nuget warnings/errors after moving to 0.13.6 breaking the build
- #2378 BenchmarkDotNet requires dotnet cli to be installed
- #2382
-p perf
doesn't seem to work right with locally built runtime (assignee: @adamsitnik) - #2389 PlatformNotSupportedException thrown on Android in ConsoleTitler
- #2391 Benchmark fails build with imported project
Merged pull requests (13)
- #2335
AggressiveOptimization
inInProcess
toolchains (by @timcassell) - #2361 Add expected results tests (by @timcassell)
- #2365 Don't copy
PackageReference
in csproj (by @timcassell) - #2367 Improve build for mono aot (by @radical)
- #2368 IComparable fallback for Tuple/ValueTuple (by @mrahhal)
- #2370 Rebuild .Net Framework projects (by @timcassell)
- #2375 Fix regression in parsing arguments with spaces Closes #2373 (by @kant2002)
- #2379 [chore]: fix error message (by @ErtanTaner)
- #2380 Cancel old jobs on push (by @timcassell)
- #2381 Support
--cli
argument forCsProjClassicNetToolchain
(by @timcassell) - #2384 perfcollect: don't restore symbols for local builds (by @adamsitnik)
- #2385 Fix missing import on Debug build (by @caaavik-msft)
- #2390 Fix PlatformNotSupportedException thrown on Android in ConsoleTitler (by @Adam--)
Commits (38)
- c9347c Set next BenchmarkDotNet version: 0.13.7 (by @AndreyAkinshin)
- df4ced Fix generate-gh-pages.yaml (by @AndreyAkinshin)
- 142a89 DotNetCliCommand.cs: Fail the build if no-dependencies retry build fails (by @radical)
- c0311b MonoAOTLLVMCsProj.txt: Add auto-imports for extension props/targets (by @radical)
- f42b97 MonoAOTLLVMCsProj.txt: Imports the props file early enough to allow (by @radical)
- f6bc29 MonoAOTLLVMCsProj.txt: Add SelfContained=true (by @radical)
- e4c4f6 [build] Specify NuGet source to PushNupkg (by @AndreyAkinshin)
- 7de12a [build] rework command line argument parsing (by @AndreyAkinshin)
- 3f890f [build] Rename tasks (by @AndreyAkinshin)
- c780b3 [build] Rework examples (by @AndreyAkinshin)
- 398ae6 [build] Rework ReleaseTask (by @AndreyAkinshin)
- 8a7caa [build] Rework ReadmeUpdater (by @AndreyAkinshin)
- 7a8135 IComparable fallback for Tuple/ValueTuple (#2368) (by @mrahhal)
- fd2639 Removed
PackageReference
from copied settings. (#2365) (by @timcassell) - 6f471c Fix package version in BenchmarkDotNet.Templates (by @AndreyAkinshin)
- dc9b80 Fix regression in parsing arguments with spaces Closes #2373 (#2375) (by @kant2002)
- bc59d4
AggressiveOptimization
inInProcess
toolchains (#2335) (by @timcassell) - 70ebf6 Update file layout (by @AndreyAkinshin)
- ab1794 Recover cSpell location (by @AndreyAkinshin)
- 28809a Rework environment-specific custom xUnit attributes (by @AndreyAkinshin)
- c682d5 Skip UserCanSpecifyCustomBuildConfiguration on .NET Framework, see #2376 (by @AndreyAkinshin)
- 55a337 Move cSpell.json to build (by @AndreyAkinshin)
- 293627 Add expected results tests (#2361) (by @timcassell)
- 60c302 Fix attribute usage in IntegrationTests.ManualRunning (by @AndreyAkinshin)
- 6fa7a9 change dotnet "cli" to "SDK" in error message (#2379) (by @ErtanTaner)
- 4d6f16 Update run-tests.yaml (#2380) (by @timcassell)
- 64d05c Support
--cli
argument forCsProjClassicNetToolchain
(#2381) (by @timcassell) - d93490 Rebuild .Net Framework projects (#2370) (by @timcassell)
- f8ab51 Enable nullable annotations for the whole solution (by @AndreyAkinshin)
- b912a8 Code cleanup (by @AndreyAkinshin)
- dc365e Add snupkg to nightly workflow artifacts (by @AndreyAkinshin)
- a89ad2 Fix path in dotnet nuget push command (by @AndreyAkinshin)
- da02fd Upgrade setup-node in spellcheck-docs workflow (by @AndreyAkinshin)
- 657342 Bump xUnit: 2.4.2->2.5.0 (by @AndreyAkinshin)
- 90ef2a Fix debug build (#2385) (by @caaavik-msft)
- 914ee7 perfcollect: don't restore symbols for local builds (#2384) (by @adamsitnik)
- fd5b76 Fix PlatformNotSupportedException thrown on Android in ConsoleTitler (#2390) (by @Adam--)
- c02aea Prepare v0.13.7 changelog (by @AndreyAkinshin)
Contributors (9)
- Adam Anderson (@Adam--)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Andrii Kurdiumov (@kant2002)
- Ankit Jain (@radical)
- Cameron Aavik (@caaavik-msft)
- Ertan Taner (@ErtanTaner)
- Mohammad Rahhal (@mrahhal)
- Tim Cassell (@timcassell)
Thank you very much!
Additional details
Date: August 04, 2023
Milestone: v0.13.7 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.7
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.7
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.13.7
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.7
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.7
BenchmarkDotNet v0.13.6
Highlights
- New BenchmarkDotNet.Diagnostics.dotTrace NuGet package.
Once this package is installed, you can annotate your benchmarks with the
[DotTraceDiagnoser]
and get a dotTrace performance snapshot at the end of the benchmark run. #2328 - Updated documentation website. We migrated to docfx 2.67 and got the refreshed modern template based on bootstrap 5 with dark/light theme switcher.
- Updated BenchmarkDotNet.Templates. Multiple issues were resolved, now you can create new benchmark projects from terminal or your favorite IDE. #1658 #1881 #2149 #2338
- Response file support.
Now it's possible to pass additional arguments to BenchmarkDotNet using
@filename
syntax. #2320 #2348 - Custom runtime support. #2285
- Introduce CategoryDiscoverer, see
IntroCategoryDiscoverer
. #2306 #2307 - Multiple bug fixes.
Milestone details
In the v0.13.6 scope, 19 issues were resolved and 33 pull requests were merged. This release includes 127 commits by 14 contributors.
Resolved issues (19)
- #1658 Pass arguments to runner in dotnet new templates
- #1694 Length cannot be less than zero
- #1783 MemoryDiagnoser table output invalid symbol
- #1856 Not Set Hardware Counter throws Argument Null Exception
- #1877 Any combination of Params/ParamsSource/ParamsAllValues is broken
- #1881 broken template for Rider
- #2036 Publish changelog for each BenchmarkDotNet versions using GitHub releases (assignee: @AndreyAkinshin)
- #2149 BenchmarkDotNet.Templates not showing in VS2022(17.3.6) new project dialog
- #2249 BenchmarkSwitcher.Run nullability check warnings in .NET 7 (assignee: @AndreyAkinshin)
- #2259 CSproj code generator produces invalid syntax after incorrectly parsing .targets file
- #2264 Benchmarkdotnet crashes when flushing the logger
- #2266 Incompatible
Microsoft.CodeAnalysis.CSharp
versioning with Razor - #2271 'Unknown processor' yet again (assignee: @br3aker)
- #2279 Endless compile errors (assignee: @AndreyAkinshin)
- #2282 TimeUnit Setting Not Being Used in Excel Report
- #2306 Allow for benchmark categories composition using inheritance (assignee: @AndreyAkinshin)
- #2312 CodeAnalysisTreatWarningsAsErrors=true in Directory.Build.props breaks auto-generated benchmark assembly build (assignee: @viktorz)
- #2333 Cannot benchmark netcoreapp3.0
- #2358 System.MissingMethodException: Method not found: 'System.String Perfolizer.Horology.TimeInterval.ToString(System.Globalization.CultureInfo, System.String, Perfolizer.Common.UnitPresentation)'
Merged pull requests (33)
- #1879 adjust defaultBenchmarkDotNetVersion on build (by @askazakov)
- #2086 Tell the user about the asterisk (by @YegorStepanov)
- #2106 If a metric value could not be calculated, display
?
instead of-
. (by @timcassell) - #2124 Fix crash when using HardwareCounter.NotSet (by @YegorStepanov)
- #2141 Add support for nested generic types (by @YegorStepanov)
- #2272 Try to shorten the log file name to avoid TooLongPath on Windows (by @AndreyAkinshin)
- #2274 Add Android specific GetNetCoreVersion Runtime Information capabilities. (by @LoopedBard3)
- #2276 Fix nullability issues in runner method signatures, fix #2249 (by @AndreyAkinshin)
- #2277 Bump xunit 2.4.1->2.4.2 (by @AndreyAkinshin)
- #2278 lock all access to CompositeLogger (by @adamsitnik)
- #2280 Add ParamsValidator (by @AndreyAkinshin)
- #2283 Improve ParamsValidator (by @AndreyAkinshin)
- #2285 Allow custom runtimes to use Executor (by @tgjones)
- #2286 Use config summary style in CsvExporter by default, fix #2282 (by @AndreyAkinshin)
- #2288 update Microsoft.CodeAnalysis.CSharp, fixes #2266 (by @dennishermann)
- #2300 Fix typos in good-practices.md (by @mrahhal)
- #2302 Fix net8.0 tfm detection (by @adamsitnik)
- #2304 IComparable for complex params (by @mrahhal)
- #2307 Introduce CategoryDiscoverer, fix #2306 (by @AndreyAkinshin)
- #2316 Updated CsProj.txt, set CodeAnalysisTreatWarningsAsErrors=false (by @viktorz)
- #2320 Add support for response files (by @kant2002)
- #2328 Add BenchmarkDotNet.Diagnostics.dotTrace (by @AndreyAkinshin)
- #2329 Bump Microsoft.NET.Test.Sdk: 16.11.0->17.6.2 (by @AndreyAkinshin)
- #2330 Use Verify library for approval tests (by @alinasmirnova)
- #2338 Improve templates (by @YegorStepanov)
- #2339 Add the args parameter to RunAll and RunAllJoined (by @YegorStepanov)
- #2343 Fix JitOptimizationsValidator when ran in NativeAOT (by @timcassell)
- #2347 Copy PackageReferences to generated csproj (by @timcassell)
- #2348 Add docs for RSP file support (by @kant2002)
- #2352 Fix netcoreapp3.0 and older builds (by @timcassell)
- #2359 Fix netcoreapp3.0 builds (by @timcassell)
- #2360 Fix
MosCpuInfoProvider
(by @timcassell) - #2362 Cancel old CI jobs (by @timcassell)
Commits (127)
- 401030 Postrelease v0.13.5 update (by @AndreyAkinshin)
- e2de0e Try to shorten the log file name to avoid TooLongPath on Windows (#2272) (by @AndreyAkinshin)
- fb7f1b Add Android specific NetCoreVersion. (#2274) (by @LoopedBard3)
- 6c128c Fix nullability issues in runner method signatures, fix #2249 (by @AndreyAkinshin)
- d9ecba Bump xunit 2.4.1->2.4.2 (by @AndreyAkinshin)
- cb571d Move ChangeLogBuilder.cs to the build project (by @AndreyAkinshin)
- c0b592 Remove scripts in docs (by @AndreyAkinshin)
- b26471 Bump docfx: 2.59.4 -> 2.62.1 (by @AndreyAkinshin)
- 0772ce log all access to CompositeLogger (#2278) (by @adamsitnik)
- 5148fe ReflectionExtensions cleanup (by @AndreyAkinshin)
- e07363 Add ParamsValidator for readonly/const fields (see #2279) (by @AndreyAkinshin)
- 4b6e83 Add validation for multiple Params* attributes, fix #1877 (by @AndreyAkinshin)
- b846d5 Add validation for Params* attributes on init-only properties, fix #1877 (by @AndreyAkinshin)
- 975a0e Fix crash when using HardwareCounter.NotSet (#2124) (by @YegorStepanov)
- 6162e9 Improve HardwareCounters validation, see #1856 (by @AndreyAkinshin)
- 565870 Allow custom runtimes to use Executor (#2285) (by @tgjones)
- 2d04a2 Use config summary style in CsvExporter by default, fix #2282 (#2286) (by @AndreyAkinshin)
- 809fed Add user help about asterisk (#2086) (by @YegorStepanov)
- ec429a update Microsoft.CodeAnalysis.CSharp, fixes #2266 (#2288) (by @dennishermann)
- 9b3186 Add twitter badge in README (by @AndreyAkinshin)
- 56c66d Create FUNDING.yml (by @AndreyAkinshin)
- bfb192 Fix net8.0 tfm detection (#2302) (by @adamsitnik)
- 492e58 Improve ParamsValidator (#2283) (by @AndreyAkinshin)
- f32a2e IComparable for complex params (#2304) (by @mrahhal)
- 960289 Enabled category inheritance, fix #2306 (by @AndreyAkinshin)
- 521b7f Introduce CategoryDiscoverer, fix #2306 (by @AndreyAkinshin)
- 40305b Add support for nested generic types (#2141) (by @YegorStepanov)
- 572dd1 Updated CsProj.txt, set CodeAnalysisTreatWarningsAsErrors=false (#2316) (by @viktorz)
- 43815d Improve timeouts for InProcessEmitExecutor under profiling (by @AndreyAkinshin)
- 7c4241 Fix nullability issues in AssemblyExtensions (by @AndreyAkinshin)
- fc7490 Enable verbose xunit logs for CI tests (by @AndreyAkinshin)
- e1f1d4 Ignore "Platform linker not found" in local runs (by @AndreyAkinshin)
- 40dca9 Fix compilation (by @AndreyAkinshin)
- c3a0f8 Workaround for xunit+ApprovalTests integration issues (by @AndreyAkinshin)
- adf72c Fix MemoryDiagnoserSupportsNativeAOT (by @AndreyAkinshin)
- b1baa7 Better assert message for AllSetupAndCleanupMethodRunsTest (by @AndreyAkinshin)
- 775ad4 Increase FinishEventTimeout in AsyncProcessOutputReader (by @AndreyAkinshin)
- 567562 Fix local DisassemblyDiagnoserTests run on macOS (by @AndreyAkinshin)
- a260bd Improve 'command took' log line format (by @AndreyAkinshin)
- ff6e8d Add BenchmarkDotNet.Diagnostics.dotTrace (by @AndreyAkinshin)
- 1c5597 Fix links in docs (by @AndreyAkinshin)
- 4b265c Fix generation of the docs/api (by @AndreyAkinshin)
- bb46d8 Bump .NET SDK: 7.0.200->7.0.302 (by @AndreyAkinshin)
- 6553e0 Bump docfx: 2.62.1->2.67.3 (by @AndreyAkinshin)
- e2c321 Simplify api generation via cake+docfx (by @AndreyAkinshin)
- 88beb2 Fix building doc specifying .net 4.6.2 as requirement (by @JobaDiniz)
- 43ae33 Bump .NET SDK: 7.0.302->7.0.304 (security fix) (by @AndreyAkinshin)
- 862617 Make formatting DotSettings consistent with Roslyn analyzer (by @AndreyAkinshin)
- bfbcec Fix ConfigCompatibilityValidatorTests on Linux (by @AndreyAkinshin)
- bed071 Bump Microsoft.NET.Test.Sdk: 16.11.0->17.6.2 (by @AndreyAkinshin)
- 73f8fd Use Verify library for approval tests (#2330) (by @alinasmirnova)
- b725ac Fix PackTask.ShouldRun (by @AndreyAkinshin)
- 2e1774 Catch the
NotSupportedException
thrown in NativeAOT for `GetReferencedAssem... (by @timcassell) - 58ee5c Add the args parameter to RunAll and RunAllJoined (#2339) (by @YegorStepanov)
- 977c05 Add support for response files (#2320) (by @kant2002)
- 17df12 Add docs for RSP file support (#2348) (by @kant2002)
- dc3cef Improve templates (#2338) (by @YegorStepanov)
- d6e080 Move RedirectGenerator to the build project (by @AndreyAkinshin)
- b797cf Update versioning in build scripts (by @AndreyAkinshin)
- ebe925 Revert "Update versioning in build scripts" (by @AndreyAkinshin)
- b91501 Update versioning in build scripts (by @AndreyAkinshin)
- 68bedd Update changelog builder (by @AndreyAkinshin)
- d46c32 Update contributors names and count in changelogs (by @AndreyAkinshin)
- 319f0e Remove hardcoded markdown from code, generate dynamically (by @AndreyAkinshin)
- 6d005a Update UID in changelog generation (by @AndreyAkinshin)
- fb6f43 Fix full.md generation (by @AndreyAkinshin)
- 124476 Bump Cake.FileHelpers: 6.0.0->6.1.3 (by @AndreyAkinshin)
- 0286c4 Split MsBuildSettings to separate tasks in the Build project (by @AndreyAkinshin)
- a519b6 Copy PackageReferences to generated csproj (#2347) (by @timcassell)
- 74c1e1 Added platform property to MsBuildSettingsBuild (by @AndreyAkinshin)
- 4e9edb Update Pack workflow (by @AndreyAkinshin)
- 9b8227 Move generated changelog details to a separate branch (by @AndreyAkinshin)
- 562a80 Add workflows/docs-changelog-generate.yaml (by @AndreyAkinshin)
- f519a5 Exclude 'docs-changelog-details' from builds (by @AndreyAkinshin)
- 152ad7 Update changelog download strategy in workflows (by @AndreyAkinshin)
- fbc0d7 Fix changelog downloading workflow (by @AndreyAkinshin)
- 748448 Add UpdateStats task (by @AndreyAkinshin)
- 609e48 Generate index.md from README.md (by @AndreyAkinshin)
- c4debe adjust defaultBenchmarkDotNetVersion on build (#1879) (by @askazakov)
- 88cb48 If a metric value could not be calculated, display
?
instead of-
. (#2106) (by @timcassell) - 3af22c Prepare v0.13.6 changelog (by @AndreyAkinshin)
- 2d5156 Remove Ben.Demystifier from Build project (by @AndreyAkinshin)
- ee1ae7 Bump Octokit: 6.2.1->7.0.0 (by @AndreyAkinshin)
- dc54ac Bump docfx: 2.67.3->2.67.5 (by @AndreyAkinshin)
- 7986ce Remove excessive logs in cleanup (by @AndreyAkinshin)
- c352b3 Improve RScript discover strategy in RPlotExporter (by @AndreyAkinshin)
- 7dc098 Handle exceptions in GetDebuggableAttribute (by @AndreyAkinshin)
- 5065bc Bump C#: 9.0->11.0 (by @AndreyAkinshin)
- 48a7b6 Support Linux brand versions (by @AndreyAkinshin)
- 03ebe4 Simplify the environment info presentation (by @AndreyAkinshin)
- 0978d0 Support macOS 14 Sonoma in OsBrandStringHelper (by @AndreyAkinshin)
- a6edfe Fix CPU frequency detection on Linux (by @AndreyAkinshin)
- 144f5c Fix CPU detection on Windows when wmic is not available via PATH, fix #2271 (by @AndreyAkinshin)
- 6291a7 Huge build project refactoring (by @AndreyAkinshin)
- 47bd6d Bump JetBrains.Profiler.SelfApi: 2.4.2->2.5.0 (by @AndreyAkinshin)
- f5777b Disable net462 integration tests on non-windows os (by @AndreyAkinshin)
- c78b7d Fix race in Broker, workaround for #2317 (#2318) (by @AndreyAkinshin)
- 389908 Suppress dependency rebuilding in integration tests on windows+net7.0 (by @AndreyAkinshin)
- 469b43 Update test-reporter (by @AndreyAkinshin)
- 2b8bc8 Fix netcoreapp3.0 and older builds (#2352) (by @timcassell)
- c0cbd2 Add version history to BuildContext (by @AndreyAkinshin)
- 41f86e Rework documentation generation (by @AndreyAkinshin)
- 4243a6 Improve build script option parsing (by @AndreyAkinshin)
- 210020 Rework GitHub workflows (by @AndreyAkinshin)
- c5fd22 Fix DocsUpdate (by @AndreyAkinshin)
- b6cbad Fix report-test-results.yaml (by @AndreyAkinshin)
- 519537 report-test-results.yaml: fix artifact download (by @AndreyAkinshin)
- 81cf9f report-test-results.yaml: fix permissions (by @AndreyAkinshin)
- e42dae GitHub workflow rename (by @AndreyAkinshin)
- 554b00 Update report-test-results.yaml (by @AndreyAkinshin)
- f3a799 Update Github Actions workflow files (by @AndreyAkinshin)
- cca009 Update report-test-results.yaml (by @AndreyAkinshin)
- 28a196 Disable AppVeyor integration (by @AndreyAkinshin)
- bd89a0 Disable Azure Pipelines integration (by @AndreyAkinshin)
- 1e9c99 Update version handling in build properties (by @AndreyAkinshin)
- d4c70e Update version prefix to 0.13.6 (by @AndreyAkinshin)
- bf020e Automatically update changelog footer (by @AndreyAkinshin)
- 3b361e Add Release build task (by @AndreyAkinshin)
- f43495 Fix documentation generation (by @AndreyAkinshin)
- 30887e Update team.md (by @AndreyAkinshin)
- 28e003 Update license.md (by @AndreyAkinshin)
- d883fd Suppress running publish-nightly on forked repositories (by Andrey Akinshin)
- ca9d8b Fix
MosCpuInfoProvider
(#2360) (by @timcassell) - 3e7334 Cancel old CI jobs when a new push is done. (#2362) (by @timcassell)
- 9171cf Lock perfolizer reference, fix #2358 (by @AndreyAkinshin)
- 278549 Add MyGet badge in README (by @AndreyAkinshin)
- e85fe2 Fix netcoreapp3.0 builds (#2359) (by @timcassell)
Contributors (14)
- Adam Sitnik (@adamsitnik)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin
- Andrey Akinshin (@AndreyAkinshin)
- Andrii Kurdiumov (@kant2002)
- askazakov (@askazakov)
- dennishermann (@dennishermann)
- Joberto Diniz (@JobaDiniz)
- Mohammad Rahhal (@mrahhal)
- Parker Bibus (@LoopedBard3)
- Tim Cassell (@timcassell)
- Tim Jones (@tgjones)
- ViktorZ (@viktorz)
- Yegor Stepanov (@YegorStepanov)
Thank you very much!
Additional details
Date: July 11, 2023
Milestone: v0.13.6 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.6
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.6
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.dotTrace/0.13.6
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.6
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.6
BenchmarkDotNet v0.13.5
Highlights
- Improved
JitStatsDiagnoser
. This diagnoser was added in v0.13.4, it shows various stats from the JIT compiler that were collected during entire benchmark run (amount of JITted methods, amount of tiered methods, how much memory JIT allocated during the benchmark). In this release, we improved metric collection (#2246, e715d5) and added the[JitStatsDiagnoser]
attribute (#2250 512413). - Enable strong-named assemblies in the released NuGet packages #2258 #2263 5cd288
- Avoid keeping referenced values returned from a benchmark in memory #1942 #2191 ff5dbe
- Keep generated files when MSBuild bin log is requested #2252 #2254 d3fbc0
- Add
Id
forUnresolvedDiagnoser
(an exception fix) #2251 a992b5 - Add brand names for Windows 22H2 and macOS 13 86f212 0c2699
- Remove deprecated
InProcessToolchain
#2248 615384
Milestone details
In the v0.13.5 scope, 3 issues were resolved and 11 pull requests were merged. This release includes 16 commits by 4 contributors.
Resolved issues (3)
- #1942 Consider changing
Consume
to not hold onto references for very long (assignee: @timcassell) - #2252 msbuild binlog for the benchmark projects gets cleaned up too, making diagnosis of build impossible (assignee: @adamsitnik)
- #2258 Strong name validation failed
Merged pull requests (11)
- #2178 Introduce MockToolchain (by @AndreyAkinshin)
- #2191 Don't hold onto references in Consumer (by @timcassell)
- #2246 improve the numbers reported for Tiered JIT (by @adamsitnik)
- #2248 Remove deprecated InProcessToolchain (by @timcassell)
- #2250 Add JitStatsDiagnoserAttribute (by @KeterSCP)
- #2251 UnresolvedDiagnoser needs to have an Id as well (by @adamsitnik)
- #2254 Keep generated files when MSBuild bin log is requested (by @adamsitnik)
- #2263 Enabled strong-named assemblies on all OS, fix #2258 (by @AndreyAkinshin)
- #2267 Bump Cake to 3.0.0 (by @AndreyAkinshin)
- #2268 simplify the MockRunner design (by @adamsitnik)
- #2269 bump SDK version to pick up .NET Runtime fix that should fix disassembler test issues (by @adamsitnik)
Commits (16)
- 9193d4 Postrelease v0.13.4 update (by @AndreyAkinshin)
- 7b1f29 Set net7.0 as primary TFM for BenchmarkDotNet.Samples (by @AndreyAkinshin)
- 86f212 Support macOS 13 (Ventura) in OsBrandStringHelper (by @AndreyAkinshin)
- 0c2699 Support Windows 22H2 in OsBrandStringHelper (by @AndreyAkinshin)
- e715d5 improve JitStatsDiagnoser based on feedback from @kouvel (#2246) (by @adamsitnik)
- a992b5 UnresolvedDiagnoser needs to have an Id as well, otherwise CompositeDiagnoser... (by @adamsitnik)
- 512413 Add JitStatsDiagnoserAttribute (#2250) (by @KeterSCP)
- 5cd288 Enabled strong-named assemblies on all OS, fix #2258 (by @AndreyAkinshin)
- 615384 Removed deprecated InProcessToolchain. (#2248) (by @timcassell)
- d3fbc0 Keep generated files when MSBuild bin log is requested (#2254) (by @adamsitnik)
- ff5dbe Don't hold onto references in Consumer (#2191) (by @timcassell)
- 59e17f Bump Cake: 2.0.0->3.0.0 (#2267) (by @AndreyAkinshin)
- f76c68 Introduce MockToolchain (#2178) (by @AndreyAkinshin)
- 9e88e4 bump SDK version to pick up .NET Runtime fix that should fix disassembler tes... (by @adamsitnik)
- e2593c Prepare v0.13.5 changelog (by @AndreyAkinshin)
- ec962b Set library version: 0.13.5 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Sergiusz Zalewski (@KeterSCP)
- Tim Cassell (@timcassell)
Thank you very much!
Additional details
Date: February 17, 2023
Milestone: v0.13.5 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.5
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.5
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.5
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.5
BenchmarkDotNet v0.13.4
Highlights
- Fixed LINQPad support #2237 #2238
- New
JitStatsDiagnoser
#2243 - Minor documentation improvements #2206 #2218
JitStatsDiagnoser
This new diagnoser introduced in (#2243) allows getting advanced JIT statistics.
Sample usage:
dotnet run -c Release -f net7.0 --filter *IntroBasic.Sleep --profiler jit
Result:
Method | Mean | Error | StdDev | Methods JITted | Methods Tiered | JIT allocated memory |
---|---|---|---|---|---|---|
Sleep | 15.53 ms | 0.034 ms | 0.032 ms | 1,102 | 15 | 221,736 B |
Milestone details
In the v0.13.4 scope, 1 issues were resolved and 4 pull requests were merged. This release includes 9 commits by 5 contributors.
Resolved issues (1)
- #2237 Version 0.13.3 breaks LINQPad (and any non-Console application)
Merged pull requests (4)
- #2206 Add single quote when use pattern with filters (by @erlangxk)
- #2218 Improve getting started guide (by @reflectronic)
- #2238 Fix IOException when Console window unavailable (#2237) (by @albahari)
- #2243 JitStatsDiagnoser (by @adamsitnik)
Commits (9)
- dc7734 Postrelease v0.13.3 update (by @AndreyAkinshin)
- e04e2d Fix IOException when Console window unavailable (#2237) (#2238) (by @albahari)
- 7694d0 Update copyright year (by @AndreyAkinshin)
- 5e8a31 Revert comments in DocFxChangelogDownloadTask (by @AndreyAkinshin)
- ea0eb2 Add single quote when use pattern with filters (#2206) (by @erlangxk)
- 0cf185 Improve getting started guide (#2218) (by @reflectronic)
- 12bf22 JitStatsDiagnoser (#2243) (by @adamsitnik)
- 858a86 Prepare v0.13.4 changelog (by @AndreyAkinshin)
- 0dbc1f Set library version: 0.13.4 (by @AndreyAkinshin)
Contributors (5)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- erlangxk (@erlangxk)
- Joe Albahari (@albahari)
- John Tur (@reflectronic)
Thank you very much!
Additional details
Date: January 13, 2023
Milestone: v0.13.4 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.4
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.4
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.4
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.4
BenchmarkDotNet v0.13.3
Highlights
- New supported technologies
- Improved support
- New features
- Add
ExceptionDiagnoser
#1736 #2169 #2182 - Add
PerfCollectProfiler
#2117 - Incremental benchmark execution with the help of
--resume
#1799 #2164 - Taskbar progress #2102 #2158 #2140
- Support
--noForcedGCs
to avoid forced GC between benchmark runs #2101 - Added apples to apples comparison mode #2116 #2193
- Communication between the host process and the benchmark process is now using pipes instead of output parsing #2092 #1933 #2189 #2207 #2200
- Add
- Dozens of bugfixes
Special Thanks
We would like to highlight some important contributors who helped us with this release:
- OpenHack'22 (devexperts.com) hackathon sponsored by the DevExperts company. As part of this hackathon we have received following PRs:
- #2132 fix: include argument and param names in --filter (by @blouflashdb)
- #2140 Update console title with benchmark information (by @franciscomoloureiro)
- #2142 Issue 2064: Mono70 moniker (by @Serg046)
- #2148 adding validation errors when the benchmarks are unsupported (by @emanuel-v-r)
- #2160 Corrected logic to restore foreground color in ConsoleLogger.cs (by @farQtech)
- #2164 1799 adding resume arg (by @melias)
- #2169 Issue #1736: Add ExceptionDiagnoser (by @Serg046)
- #2161 add quiet logger (by @franciscomoloureiro) (not merged yet)
- #2171 Issue #1024: Calculate baseline by the fastest benchmark (by @Serg046) (not merged yet)
- Jan Vorlicek helped to implement arm64 disassembler during an internal Microsoft Hackathon:
- #2107 Implement TryGetReferencedAddress for relative branches (by @janvorli)
- #2123 Added other arm64 constant form extraction plus other changes (by @janvorli)
- Ahmed Garhy (maintainer of Capstone.NET) helped to improve Capstone.NET, which was need to implement arm64 disassembler:
- 9ee1/Capstone.NET#37 Sign Assembly with a Strong Name (by @9ee1)
Milestone details
In the v0.13.3 scope, 29 issues were resolved and 71 pull requests were merged. This release includes 87 commits by 22 contributors.
Resolved issues (29)
- #989 [Suggestion] add API for detecting benchmark run failures. (assignee: @emanuel-v-r)
- #1422 --disasm switch on ARM64 throws Exception (assignee: @adamsitnik)
- #1469 Host exe marked /largeaddressaware
- #1521 Iteration setup and cleanup causes job baseline error with multiple runtimes passed to BenchmarkSwitcher
- #1684 Getting System.FormatException when passing certain string as params. (assignee: @YegorStepanov)
- #1709 BenchmarkSwitcher executes all benchmarks that share a base class (assignee: @YegorStepanov)
- #1736 Consider adding an ExceptionDiagnoser (assignee: @Serg046)
- #1737 runtime knobs broken link (assignee: @YegorStepanov)
- #1799 Enable interactive, incremental runs through the terminal (assignee: @melias)
- #1839 Markdown output should escape the output
- #1867 Trailing newline characters in input value break summary table
- #1933 how to debug reflection error
- #2064 Running with .Net 6/7 Mono JIT (assignee: @Serg046)
- #2070 BenchmarkDotNet crashing on Linux with DisassemblyDiagnoser (assignee: @adamsitnik)
- #2088 Running on Linux leaves terminal colors changed (assignee: @farQtech)
- #2099 WASM is recognized as NativeAOT
- #2102 Add benchmarking progress to console title (assignee: @franciscomoloureiro)
- #2125 Tests Just Stop Running During Run (assignee: @adamsitnik)
- #2126 DotNet 6 - VB - Error: The type or namespace name 'DeserializingBenchmarks' could not be found in the global namespace (are you missing an assembly reference?)
- #2131 --filter should include argument/params names (assignee: @blouflashdb)
- #2146 Build warning MSB3245: Could not locate the assembly
Mono.Posix
- #2167 Site: No vertical bar should be displayed for the Main page
- #2185 WarmupCount=0 doesn't work (assignee: @AndreyAkinshin)
- #2187 Reports for InProcess jobs don't include non-Result measurements (assignee: @AndreyAkinshin)
- #2189 broker.ProcessData() hangs if something wrong is the spawned process (assignee: @adamsitnik)
- #2210 Broken integration tests on Ubuntu 22.04 (assignee: @adamsitnik)
- #2211 Setting affinity does not work for Environment.ProcessorCount >= 32 (assignee: @Donis-)
- #2216 ppc64le architecture support required for running benchmarks on Power Systems (assignee: @adamsitnik)
- #2223 Disassembler fails to disassemble some methods on Linux when using recursive mode (assignee: @adamsitnik)
Merged pull requests (71)
- #2018 Port JetBrains' nullability annotations and clean-up code. (by @teo-tsirpanis)
- #2085 Use latest AzDO macOS pool (by @adamsitnik)
- #2087 Nit: fix broken link (by @YegorStepanov)
- #2092 Use Pipes for host and benchmark process communication (by @adamsitnik)
- #2095 [NativeAOT] use PublishAot and don't reference ILCompiler in explicit way (by @adamsitnik)
- #2096 ExecuteResult: Surface a Data property so the full output can be acce… (by @radical)
- #2101 Added a command line arg for not inducing any GCs while running Benchmarks (by @mrsharm)
- #2104 Fix invalid pre-requisites NativeAOT link in the 0.13.2 changelog (by @KeterSCP)
- #2107 Implement TryGetReferencedAddress for relative branches (by @janvorli)
- #2112 Disambiguate NativeAOT, and Wasm identification in BenchmarkDotNet.Po… (by @radical)
- #2116 Implement apples to apples comparison mode (by @adamsitnik)
- #2117 PerfCollect diagnoser (by @adamsitnik)
- #2118 Resolve indirect addresses in disassembly (by @adamsitnik)
- #2119 Initial version of the Arm64 instruction formatter (by @adamsitnik)
- #2120 Roslyn Toolchain does not support .NET Core (by @YegorStepanov)
- #2123 Added other arm64 constant form extraction plus other changes (by @janvorli)
- #2127 arm64 disassembler (by @adamsitnik)
- #2132 fix: include argument and param names in --filter (by @blouflashdb)
- #2133 ensure CompositeLogger is synchronized (by @adamsitnik)
- #2134 [Mono] Disable LLVM JIT (by @fanyang-mono)
- #2135 Escape Param data for the exporters (by @YegorStepanov)
- #2136 Pass non escaped strings to generated project (by @YegorStepanov)
- #2137 Update doc links and reduce redirects (by @YegorStepanov)
- #2140 Update console title with benchmark information (by @franciscomoloureiro)
- #2142 Issue 2064: Mono70 moniker (by @Serg046)
- #2143 throw an exception when multiple benchmark projects with the same name are found (by @adamsitnik)
- #2144 Automated spellcheck for docs via GitHub Actions (and address all raised issues) (by @SeanKilleen)
- #2145 Handle addresses larger than 2GB for 32-bit benchmarks #1469 (by @leonvandermeer)
- #2148 adding validation errors when the benchmarks are unsupported (by @emanuel-v-r)
- #2150 Update StaThread intro documentation (by @norepro)
- #2151 Fix user input matching (by @YegorStepanov)
- #2152 Make ParamsAllValues validator mandatory (by @YegorStepanov)
- #2154 remove dependency to Mono.Posix.NETStandard to unblock WASM benchmarks runs (by @adamsitnik)
- #2158 Add taskbar progress (by @timcassell)
- #2160 Corrected logic to restore foreground color in ConsoleLogger.cs (by @farQtech)
- #2164 1799 adding resume arg (by @melias)
- #2168 Fix bugs and typos (by @YegorStepanov)
- #2169 Issue #1736: Add ExceptionDiagnoser (by @Serg046)
- #2172 Cleanup NuGet.config (by @Youssef1313)
- #2174 Added the ability to not run with Evaluation Overhead (by @mrsharm)
- #2175 Rename TargetCount to IterationCount in SimpleJob attribute (by @johanvts)
- #2176 Fix #1521 (by @YegorStepanov)
- #2177 Simplify GetHashCode() (by @YegorStepanov)
- #2180 Fix race in AsyncProcessOutputReader (by @AndreyAkinshin)
- #2181 Fix #2167 - Give main page a title. Then the tab displays 'Home | Be…' (by @leonvandermeer)
- #2182 Fix a threading issue in ExceptionDiagnoser #1736 (by @leonvandermeer)
- #2183 Remove allowMultiple=true from column attributes (by @YegorStepanov)
- #2186 Fix EngineStage.Run for warmupCount=0 (fixes #2185) (by @AndreyAkinshin)
- #2188 Engine.Run() should return the full list of performed measurements (fixes #2187) (by @AndreyAkinshin)
- #2192 Add net8.0 support to all existing runtimes and toolchains (by @adamsitnik)
- #2193 use ImmutableConfig when doing apples-to-apples comparison (by @adamsitnik)
- #2196 Docs: Add note for ETW Profiling regarding Intel TDT (by @rbanks54)
- #2200 Fix resources leak (by @adamsitnik)
- #2201 fix WASM support (by @adamsitnik)
- #2202 Fix job filtering (by @YegorStepanov)
- #2204 Deprecate RunSource/RunUrl methods (by @YegorStepanov)
- #2207 Avoid hangs when starting benchmark process fails (by @adamsitnik)
- #2208 Fix Full Framework tests (by @adamsitnik)
- #2209 Update SDK to .NET 7, re-enable tests (by @adamsitnik)
- #2212 use the new, strong-name signed Capstone.NET (by @adamsitnik)
- #2217 Bump Newtonsoft.Json (by @YegorStepanov)
- #2219 add Armv6 and Ppc64le architectures support (by @adamsitnik)
- #2220 Remove duplicate reference (by @YegorStepanov)
- #2221 NuGet.org should be the default feed for NativeAOT 7.0 ILCompiler (by @adamsitnik)
- #2222 arm64 disassembler tests (by @adamsitnik)
- #2227 Add support for MonoVM to MemoryDiagnoser (by @adamsitnik)
- #2228 Increase max supported affinity from 31 to 64 (#2211) (by @Donis-)
- #2230 Add support for .NET SDK that uses Mono instead CLR as a default VM (by @adamsitnik)
- #2231 improve Android support (by @adamsitnik)
- #2234 Disassembler realiability fixes (by @adamsitnik)
- #2235 tests can't assume x64 hardware (by @adamsitnik)
Commits (87)
- 33b288 Use latest AzDO macOS pool (#2085) (by @adamsitnik)
- 83750b Postrelease v0.13.2 update (by @AndreyAkinshin)
- 188c11 Nit: fix broken link (#2087) (by @YegorStepanov)
- 3a18b1 use PublishAot and don't reference ILCompiler in explicit way (#2095) (by @adamsitnik)
- 8ed521 Added a command line arg for not inducing any GCs while running Benchmarks (#... (by @mrsharm)
- 8514b2 ExecuteResult: Surface a Data property so the full output can be accessed (#2... (by @radical)
- 58f2d1 Use Pipes for host and benchmark process communication (#2092) (by @adamsitnik)
- b525ba Fix invalid pre-requisites NativeAOT links in the docs (#2104) (by @KeterSCP)
- 0cee16 Disambiguate NativeAOT, and Wasm identification in BenchmarkDotNet.Portabilit... (by @radical)
- 21a294 Implement apples to apples comparison mode (#2116) (by @adamsitnik)
- 37d0cf Roslyn Toolchain does not support .NET Core (#2120) (by @YegorStepanov)
- dbccef Add workflows/docs-stable.yaml (by @AndreyAkinshin)
- d03287 PerfCollect diagnoser (#2117) (by @adamsitnik)
- de5cf4 Bump docfx 2.59.3->2.59.4 (by @AndreyAkinshin)
- 7e87e8 Update workflows/docs-stable.yaml (by @AndreyAkinshin)
- ff443a Update workflows/docs-stable.yaml (by @AndreyAkinshin)
- a78c2e Add write-all permissions to workflows/docs-stable.yaml (by @AndreyAkinshin)
- f4d99a arm64 disassembler (#2127) (by @adamsitnik)
- 97c2d1 ensure access to logger is synchronized for async output reader (#2133) (by @adamsitnik)
- 9938c3 include argument and param names in --filter (#2132) (by @blouflashdb)
- 7f9590 Update doc links and reduce redirects (#2137) (by @YegorStepanov)
- 95bb2a Escape Param data for the exporters (#2135) (by @YegorStepanov)
- ecb25b Pass non escaped strings to generated project (#2136) (by @YegorStepanov)
- 5ed46d [Mono] Disable LLVM JIT (#2134) (by @fanyang-mono)
- 1f5637 throw an exception when multiple benchmark projects with the same name are fo... (by @adamsitnik)
- 095975 Handle addresses larger than 2GB for 32-bit benchmarks #1469 (#2145) (by @leonvandermeer)
- 8d2379 Update console title with benchmark information (#2140) (by @franciscomoloureiro)
- f8e0a5 Automated spellcheck for docs via GitHub Actions (and address all raised issu... (by @SeanKilleen)
- db8f8d Fix spelling warning in docs/articles/configs.jobs.md (by @AndreyAkinshin)
- adf9d6 Fix BenchmarkSwitcher user input matching (#2151) (by @YegorStepanov)
- b758d2 Update StaThread intro documentation (#2150) (by @norepro)
- eda1a4 remove dependency to Mono.Posix.NETStandard to unblock WASM benchmarks runs (... (by @adamsitnik)
- 58d4ba Make ParamsAllValues validator mandatory (#2152) (by @YegorStepanov)
- 28bf21 adding validation errors when the benchmarks are unsupported (#2148) (by @emanuel-v-r)
- 1fb101 Corrected logic to restore foreground color in ConsoleLogger.cs (#2160) (by @farQtech)
- c02c3d Fix bugs and typos (#2168) (by @YegorStepanov)
- 0f7eb2 Implement --resume support (#2164), fixes #1799 (by @melias)
- 7d8375 Issue #1736: Add ExceptionDiagnoser (#2169) (by @Serg046)
- 64c3a3 Implement MonoVM toolchain for net6.0 and net7.0 monikers (#2142) fixes #2064 (by @Serg046)
- c69895 Add taskbar progress (#2158) (by @timcassell)
- 163899 Cleanup NuGet.config (#2172) (by @Youssef1313)
- f4c0a7 Added the ability to not run with Evaluation Overhead from command line (#2174) (by @mrsharm)
- ce1b74 Rename TargetCount to IterationCount in SimpleJob attribute (#2175) (by @johanvts)
- 18c6ff Fix #1521 (#2176) (by @YegorStepanov)
- 4eb6d3 Bump Build.csproj TFM to net6.0 (by @AndreyAkinshin)
- 279c96 Bump actions/checkout v2->v3 (by @AndreyAkinshin)
- a1c62c Bump actions/checkout v2->v3 for spellcheck.yml (by @AndreyAkinshin)
- 7ba989 Automatically generate redirects in documentation (by @AndreyAkinshin)
- d55c47 Remove old redirect files in documentation (by @AndreyAkinshin)
- b6d329 Bump System.Drawing.Common in BenchmarkDotNet.Samples.csproj: 4.5.1->4.7.2 (by @AndreyAkinshin)
- ee8125 Remove allowMultiple=true from column attributes (#2183) (by @YegorStepanov)
- ddd2f3 Fix a threading issue in ExceptionDiagnoser #1736 (#2182) (by @leonvandermeer)
- 276f1a Fix EngineStage.Run for warmupCount=0 (fixes #2185) (#2186) (by @AndreyAkinshin)
- 681a63 Fix #2167 - Give main page a title. Then the tab displays 'Home | BenchmarkDo... (by @leonvandermeer)
- 00f693 Fix race in AsyncProcessOutputReader (#2180) (by @AndreyAkinshin)
- 36e998 Disable MemoryDiagnoserSupportsNativeAOT on osx-arm64 (by @AndreyAkinshin)
- 9e759f Disable ThreadingDiagnoserTests with ILCompiler 6.0.0-rc.1.21420.1 on osx-arm64 (by @AndreyAkinshin)
- e75bdd Engine.Run() should return the full list of performed measurements (fixes #21... (by @AndreyAkinshin)
- 28a8e7 Simplify GetHashCode() (#2177) (by @YegorStepanov)
- 36f9e7 Set net6.0 as the first TFM for BenchmarkDotNet.Tests (by @AndreyAkinshin)
- 761590 Add net8.0 support to all existing runtimes and toolchains (#2192) (by @adamsitnik)
- 8b6159 use ImmutableConfig when doing apples-to-apples comparison (#2193) (by @adamsitnik)
- a4ab68 Docs: Add note for ETW Profiling regarding Intel TDT and Windows Defender (#2... (by @rbanks54)
- 9c32a8 fix resources leak (#2200) (by @adamsitnik)
- ad8e9b fix WASM support (#2201) (by @adamsitnik)
- ccbaf0 Remove duplicated jobs when creating immutable config (#2202) (by @YegorStepanov)
- 90c82b Deprecate methods (#2204) (by @YegorStepanov)
- 47b8b7 Avoid hangs when starting benchmark process fails (#2207) (by @adamsitnik)
- 7982b8 Fix Full Framework tests (#2208) (by @adamsitnik)
- 61b3c5 Update SDK to .NET 7, re-enable NativeAOT tests, fix some other tests (#2209) (by @adamsitnik)
- d38313 use the new, strong-name signed Capstone.NET (#2212) (by @adamsitnik)
- b40150 add Armv6 and Ppc64le architectures support (#2219) (by @adamsitnik)
- 5ce28b Bump Newtonsoft.Json (#2217) (by @YegorStepanov)
- 3531c1 Port JetBrains' nullability annotations and clean-up code. (#2018) (by @teo-tsirpanis)
- 5ef855 Remove duplicate reference (#2220) (by @YegorStepanov)
- ee24d7 NuGet.org should be the default feed for NativeAOT 7.0 ILCompiler package (#2... (by @adamsitnik)
- 530d00 arm64 disassembler tests (#2222) (by @adamsitnik)
- 699285 Add support for MonoVM to MemoryDiagnoser (#2227) (by @adamsitnik)
- 0c90af change something small just to triegger the CI (by @adamsitnik)
- 2cce42 improve Android support (#2231) (by @adamsitnik)
- a6ef73 don't run Long Running Test on AppVeyor, try to avoid 1h timeouts (by @adamsitnik)
- bf8b53 Increase max supported affinity from 31 to 64 (#2211) (#2228) (by @Donis-)
- 82f03f Add support for .NET SDK that uses Mono instead CLR as a default VM (#2230) (by @adamsitnik)
- 968448 Disassembler realiability fixes (#2234) (by @adamsitnik)
- a098bc tests can't assume x64 hardware (#2235) (by @adamsitnik)
- 2665ac Prepare v0.13.3 changelog (by @AndreyAkinshin)
- 0714f5 Set library version: 0.13.3 (by @AndreyAkinshin)
Contributors (22)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Ankit Jain (@radical)
- blouflashdb (@blouflashdb)
- Donis- (@Donis-)
- Emanuel Ramos (@emanuel-v-r)
- Fan Yang (@fanyang-mono)
- farQtech (@farQtech)
- franciscomoloureiro (@franciscomoloureiro)
- Johan von Tangen Sivertsen (@johanvts)
- leonvandermeer (@leonvandermeer)
- Maykon Elias (@melias)
- Mukund Raghav Sharma (Moko) (@mrsharm)
- norepro (@norepro)
- Richard Banks (@rbanks54)
- Sean Killeen (@SeanKilleen)
- Sergey Aseev (@Serg046)
- Sergiusz Zalewski (@KeterSCP)
- Theodore Tsirpanis (@teo-tsirpanis)
- Tim Cassell (@timcassell)
- Yegor Stepanov (@YegorStepanov)
- Youssef Victor (@Youssef1313)
Thank you very much!
Additional details
Date: December 26, 2022
Milestone: v0.13.3 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.3
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.3
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.3
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.3
BenchmarkDotNet v0.13.2
Highlights
In BenchmarkDotNet v0.13.2, we have implemented support for:
- .NET 7
- NativeAOT
- .NET Framework 4.8.1
We have also introduced new features and improvements including:
- Possibility to hide selected columns,
- Allocation Ratio column,
- Logging progress and estimated finish time,
- ARM64 support for
BenchmarkDotNet.Diagnostics.Windows
package, - Printing Hardware Intrinsics information,
- Glob filters support for DisassemblyDiagnoser.
Of course, this release includes dozens of other improvements and bug fixes!
Our special thanks go to @mawosoft, @YegorStepanov and @radical who fixed a LOT of really nasty bugs.
Supported technologies
.NET 7 and .NET Framework 4.8.1
.NET 4.8.1 has been released earlier this month, while .NET 7 should land in autumn this year. Now you can use BenchmarkDotNet to compare both!
BenchmarkDotNet=v0.13.1.1845-nightly, OS=Windows 11 (10.0.22622.575)
Microsoft SQ1 3.0 GHz, 1 CPU, 8 logical and 8 physical cores
.NET SDK=7.0.100-preview.6.22352.1
[Host] : .NET 7.0.0 (7.0.22.32404), Arm64 RyuJIT AdvSIMD
Job-QJVIDT : .NET 7.0.0 (7.0.22.32404), Arm64 RyuJIT AdvSIMD
Job-FNNXOY : .NET Framework 4.8.1 (4.8.9032.0), Arm64 RyuJIT
Method | Runtime | Mean | Allocated |
---|---|---|---|
BinaryTrees_2 | .NET 7.0 | 193.6 ms | 227.33 MB |
BinaryTrees_2 | .NET Framework 4.8.1 | 192.8 ms | 228.01 MB |
Credit for adding .NET 7 support in #1816 goes to @am11. @adamsitnik implemented .NET 4.8.1 support in #2044 and #2067. Big thanks to @MichalPetryka who was using preview versions of BenchmarkDotNet and reported a bug related to .NET 4.8.1 support: #2059 that got fixed before we released a new version.
NativeAOT
We are really excited to see the experimental CoreRT project grow and become officially supported by Microsoft (under new name: NativeAOT)! You can read more about it here. Implementing and improving the support was a combined effort of multiple contributors that spawned across multiple repositories:
- @MichalStrehovsky: #66290 in dotnet/runtime, #2020 in dotnet/BenchmarkDotNet, #2046 in dotnet/BenchmarkDotNet
- @hez2010: #66650 in dotnet/runtime
- @Beau-Gosse-dev: #1955 in dotnet/BenchmarkDotNet
- @adamsitnik: #1960 in dotnet/BenchmarkDotNet, #1965 in dotnet/BenchmarkDotNet, #1972 in dotnet/BenchmarkDotNet, #1973 in dotnet/BenchmarkDotNet, #1994 in dotnet/BenchmarkDotNet, #1997 in dotnet/BenchmarkDotNet, #2045 in dotnet/BenchmarkDotNet, #2068 in dotnet/BenchmarkDotNet
- @kant2002: #1976 in dotnet/BenchmarkDotNet, #1979 in dotnet/BenchmarkDotNet
- @jkotas: #68038 in dotnet/runtime, #68142 in dotnet/runtime, #68249 in dotnet/runtime, #68308 in dotnet/runtime, #68375 in dotnet/runtime
- @MichalPetryka: #2065 in dotnet/BenchmarkDotNet
As every AOT solution, NativeAOT has some limitations like limited reflection support or lack of dynamic assembly loading. Because of that, the host process (what you run from command line) is never an AOT process, but just a regular .NET process. This process (called Host process) uses reflection to read benchmarks metadata (find all [Benchmark]
methods etc.), generates a new project that references the benchmarks and compiles it using ILCompiler. The boilerplate code is not using reflection, so the project is built with TrimmerDefaultAction=link
(we have greatly reduced build time thanks to that). Such compilation produces a native executable, which is later started by the Host process. This process (called Benchmark or Child process) performs the actual benchmarking and reports the results back to the Host process. By default BenchmarkDotNet uses the latest version of Microsoft.DotNet.ILCompiler
to build the NativeAOT benchmark according to this instructions. Moreover, BenchmarkDotNet by default uses current machines CPU features (change: #1994, discussion: #2061) and if you don't like this behavior, you can disable it.
This is why you need to:
- install pre-requisites required by NativeAOT compiler
- target .NET to be able to run NativeAOT benchmarks (example:
<TargetFramework>net7.0</TargetFramework>
in the .csproj file) - run the app as a .NET process (example:
dotnet run -c Release -f net7.0
). - specify the NativeAOT runtime in an explicit way, either by using console line arguments
--runtimes nativeaot7.0
(the recommended approach), or by using[SimpleJob]
attribute or by using the fluent Job config APIJob.ShortRun.With(NativeAotRuntime.Net70)
:
dotnet run -c Release -f net7.0 --runtimes nativeaot7.0
For more examples please go to docs.
BenchmarkDotNet=v0.13.1.1845-nightly, OS=Windows 11 (10.0.22000.856/21H2)
AMD Ryzen Threadripper PRO 3945WX 12-Cores, 1 CPU, 24 logical and 12 physical cores
.NET SDK=7.0.100-rc.1.22423.16
[Host] : .NET 7.0.0 (7.0.22.42223), X64 RyuJIT AVX2
Job-KDVXET : .NET 7.0.0 (7.0.22.42223), X64 RyuJIT AVX2
Job-HFRAGK : .NET 7.0.0-rc.1.22424.9, X64 NativeAOT AVX2
Method | Runtime | Mean | Ratio | Allocated |
---|---|---|---|---|
BinaryTrees_2 | .NET 7.0 | 95.06 ms | 1.00 | 227.33 MB |
BinaryTrees_2 | NativeAOT 7.0 | 90.32 ms | 0.96 | 227.33 MB |
Some of .NET features are not supported by Native AOT, that is why you may want to filter them out using new [AotFilter]
attribute:
[AotFilter("Currently not supported due to missing metadata.")]
public class Xml_FromStream<T>
New features and improvements
Hiding Columns
In #1621 @marcnet80 has reduced the number of columns displayed when multiple runtimes are being compared.
In #1890 @YegorStepanov has implemented a set of new APIs that allow for hiding columns. It's also exposed via -h
and --hide
command line arguments.
[MemoryDiagnoser] // adds Gen0, Gen1, Gen2 and Allocated Bytes columns
[HideColumns(Column.Gen0, Column.Gen1, Column.Gen2)] // dont display GenX columns
public class IntroHidingColumns
{
[Benchmark]
public byte[] AllocateArray() => new byte[100_000];
}
Sample results without [HideColumns]
:
Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
---|---|---|---|---|---|---|---|
AllocateArray | 3.303 us | 0.0465 us | 0.0435 us | 31.2462 | 31.2462 | 31.2462 | 97.69 KB |
With:
Method | Mean | Error | StdDev | Allocated |
---|---|---|---|---|
AllocateArray | 3.489 us | 0.0662 us | 0.0763 us | 97.69 KB |
Imagine how much time @YegorStepanov has saved to all the people who so far were removing the columns manually from the results before publishing them on GitHub!
Allocation Ratio Column
In #1859 @YegorStepanov has added Allocation Ratio Column. It's enabled by default when MemoryDiagnoser
is used and one of the benchmarks is marked as [Benchmark(Baseline = true)]
or when there are multuple jobs defined and one of them is marked as baseline.
[MemoryDiagnoser]
public class AllocationColumnSample
{
[Benchmark(Baseline = true)]
[Arguments("test")]
public string Builder(string value)
{
StringBuilder sb = new (value);
for (int i = 0; i < 10; i++)
sb.Append(value);
return sb.ToString();
}
[Benchmark]
[Arguments("test")]
public string Concatenation(string value)
{
string result = value;
for (int i = 0; i < 10; i++)
result += value;
return result;
}
}
Method | value | Mean | Error | StdDev | Ratio | Gen 0 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|
Builder | test | 127.9 ns | 0.49 ns | 0.43 ns | 1.00 | 0.0544 | 456 B | 1.00 |
Concatenation | test | 120.2 ns | 0.94 ns | 0.88 ns | 0.94 | 0.0908 | 760 B | 1.67 |
Progress and estimated finish time
In #1909 @adamsitnik has added logging of progress and estimated finish time.
// ** Remained 5211 (99.9%) benchmark(s) to run. Estimated finish 2022-08-25 22:26 (9h 7m from now) **
arm64 support for BenchmarkDotNet.Diagnostics.Windows package
Due to the update to TraceEvent 3.0 BenchmarkDotNet.Diagnostics.Windows
package has now arm64 support. Which means that you can use EtwProfiler
and other ETW-based diagnosers on Windows arm64.
It would not be possible without @brianrob who implemented arm64 support for TraceEvent in #1533!
Hardware Intrinsics information
In #2051 @adamsitnik has extended the hardware information printed in the Summary table with Hardware Intrinsics information.
Sine the space in Summary table is quite limited, we full information is printed only in the log:
Special thanks to @tannergooding who provided a lot of very valuable feedback and @MichalPetryka who contributed an improvement #2066 for older runtimes.
Other improvements
- WASM toolchain has received a lot of improvements from various .NET Team members: #1769, #1936, #1938, #1982.
- Dependencies and TFMs updates: #1805, #1978, #2012, #2019, #2035.
- Ensure proper SummaryStyle handling implemented by @mawosoft in #1828.
- Preserving
EnablePreviewFeatures
project setting which gives the possibility to benchmark preview .NET features. Implemented by @kkokosa in #1842. - CI: Using non-deprecated macOS pool on Azure Pipelines, implemented by @akoeplinger in #1847
- CI: Updating Cake to 2.0.0, adopting frosting project style. Implemented by @AndreyAkinshin in #1865.
- Detecting ReSharper's Dynamic Program Analysis. Implemented by @adamsitnik in #1874.
- Preventing benchmark failure when some of the exporters fail. Implemented by @epeshk in #1902.
- Don't use the diagnosers when benchmarking has failed. Implemented by @adamsitnik in #1903.
- Ensuring the default order of benchmarks is the same as declared in source code. Implemented by @adamsitnik in #1907.
- Making
BuildTimeout
configurable. Implemented by @adamsitnik in #1906. - Notify users about private methods with Setup/Cleanup attributes. Implemented by @epeshk in #1912.
- Don't run Roslyn Analyzers for the generated code. Implemented by @adamsitnik in #1917.
- Ensure
WorkloadActionUnroll
and similar are optimized if possible. Implemented by @AndyAyersMS in #1935. - Don't use blocking acknowledgments when there is no need to. Implemented by @adamsitnik in #1940.
- Executor: Don't use Process.ExitCode, unless the process has exited. Implemented by @radical in #1947.
- Revise heuristic for initial jitting. Implemented by @AndyAyersMS in #1949.
- Allow logging build commands output. Implemented by @radical in #1950.
- Change Mono AOT mode to Normal AOT with LLVM JIT fall back. Implemented by @fanyang-mono in #1990.
Glob filters support for DisassemblyDiagnoser
So far, the disassembler was always loading the type that was generated by BDN, searching for the benchmark method, disassembling it and when encountered direct method calls, disassembling the called methods as well (if their depth was lesser or equal to max configured depth).
This was working fine, but only for direct method calls. For indirect, the disassembly was incomplete.
In #2072 @adamsitnik has added the possibility to filter methods disassembled by the DisassemblyDiagnoser
.
The users can now pass --disasmFilter $globPattern
and it's going to be applied to full signatures of all methods available for disassembling. Examples:
--disasmFilter *System.Text*
- disassemble allSystem.Text
methods.--disasmFilter *
- disassemble all possible methods.
Moreover, ClrMD was updated to v2 (#2040) and few disassembler bugs have been fixed (#2075, #2078). We are expecting that the disassembler will be more reliable now.
Docs and Samples improvements
Big thanks to @SnakyBeaky, @Distinctlyminty, @asaf92, @adamsitnik and @eiriktsarpalis who have improved our docs, samples and error messages!
#1776, #1797, #1850, #1861, #1939, #1974, #1997, #2042, #2050, #2068.
Bug fixes
- WASM: #1811, #1846, #1916, #1926, #1932.
- Diagnoser-provided Analysers weren't automatically added to Config. Fixed by @mawosoft in #1790.
- Exportes could been duplicated. Fixed by @workgroupengineering in #1796.
- Small bug in SummaryStyle. Fixed by @mawosoft in #1801.
InvalidOperationException/NullReferenceException
inSmartParaemter
. Fixed by @mawosoft in #1810.- Failures caused by colons in benchmark name. Fixed by @ronbrogan in #1823.
- Some benchmark arugments were not properly escaped and were causing process launcher to crush. Fixed by @adamsitnik in #1841
- Invalid size specifiers for Memory and Disassembly diagnosers. Fixed by @YegorStepanov in #1854 and #1855.
- Respect LogicalGroup order in DefaultOrderer. Fixed by @AndreyAkinshin in #1866.
- Endless loop in user interaction with redirected input. Fixed by @tmds in #.
- Broken power plan support. Fixed by @YegorStepanov in #1885.
BytesAllocatedPerOperation
was not being output by the JSON and XML exporters. Fixed by #martincostello in #1919.- Incorrect default InvocationCount in the summary table. Fixed by @AndreyAkinshin in #1929.
- Failed build output was printed in reverse order. Fixed by @radical in #1945.
- Build failures due to
NETSDK1150
. Fixed by @OlegOLK in #1981. MetricCoumn
was not respecting provided units when formatting values. Fixed by @mawosoft in #2033.- Generating invalid code that was causing benchmark failures. Fixed by @mawosoft in #2041.
- CI: non-master build branches were publishing artifacts to the CI feed. Fixed by @mawosoft in #2047.
- Comments in the project files were causing build failures. Fixed by @mawosoft in #2056.
Milestone details
In the v0.13.2 scope, 50 issues were resolved and 124 pull requests were merged. This release includes 147 commits by 34 contributors.
Resolved issues (50)
- #299 Add API to remove columns for baseline comparison (assignee: @AndreyAkinshin)
- #384 Print Vector
.Count as part of machine info (assignee: @adamsitnik) - #722 Add scaled column for Allocated Memory
- #837 Problems with default UnrollFactor in V0.11.0 (assignee: @adamsitnik)
- #1177 Public types missing from reference assemblies don't work with ParamsSource
- #1506 BenchmarkDotNet does not force to High Performance Mode during running (assignee: @YegorStepanov)
- #1603 Don't display Job and Toolchain column when running benchmarks for multiple runtimes
- #1669 --buildTimeout does not seem to work (assignee: @adamsitnik)
- #1680 Cannot override RD.xml for NativeAOT
- #1711 Add support for IBM Z architecture (assignee: @adamsitnik)
- #1727 Unhelpful rounding in MemoryDiagnoser
- #1753 "call: command not found" in .sh build script (assignee: @AndreyAkinshin)
- #1755 EventPipeProfiler: File names are very verbose
- #1756 EventPipeProfile: speedscope.app cannot parse result file (assignee: @adamsitnik)
- #1774 Ability to compare --corerun with --runtimes (assignee: @adamsitnik)
- #1775 Please add an easy way to remove columns
- #1789 Small bug in ImmutableConfigbuilder (assignee: @mawosoft)
- #1794 typo in error message
- #1800 Small bug in SummaryStyle (assignee: @mawosoft)
- #1803 Benchmark exception stops entire suite run (assignee: @adamsitnik)
- #1809 Exception when using ParamsSource with (null) objects
- #1812 Invalid codegen for Enumerable.Empty returned from ParamsSource
- #1819 How to change exporter output path?
- #1836 [Bug]
System.InvalidOperationException: There is an error in XML document (0, 0).
- #1857 Github actions ubuntu-latest "Unable to load shared library 'advapi32.dll' or one of its dependencies" when profiling dotnet 5
- #1864 Is there a way to join summaries as if the benchmarks were run separately? (assignee: @AndreyAkinshin)
- #1871 Detect ReSharper's Dynamic Program Analysis (assignee: @adamsitnik)
- #1872 BenchmarkDontNet should make allowance for projects where Preview Features are enabled
- #1887 MonoAotLLVM runtime is not actually AOTing things (assignee: @naricc)
- #1900 Failed to benchmark .NET 7 in release mode
- #1908 BenchmarkRunner.RunSource and BenchmarkRunner.RunUrl doesn't work
- #1929 Incorrect default InvocationCount in the summary table (assignee: @AndreyAkinshin)
- #1934 Ensure WorkloadActionUnroll and similar are optimized if possible
- #1937 PR builds should not be published to BDN nightly feed (assignee: @mawosoft)
- #1943 GitHub Actions Windows CI leg failing due to lack of native tools (assignee: @adamsitnik)
- #1948 questions to help with future PRs
- #1957 Broken pipe (assignee: @adamsitnik)
- #1977 More Data for JSON and XML Export
- #1989 Way to summarize all the params results (assignee: @YegorStepanov)
- #1992 API Docs on website empty (assignee: @AndreyAkinshin)
- #2000 DisassemblyDiagnoser broken on Linux (assignee: @adamsitnik)
- #2009 Cleanup the dependencies (assignee: @martincostello)
- #2011 Release-only build error when using ParamsSource with a LINQ method: Cannot implicitly convert type 'object' (assignee: @mawosoft)
- #2016 Support for .NET 7?
- #2028 Trying to build BDN on a windows arm64 host (assignee: @adamsitnik)
- #2039 Support .NET Framework 4.8.1 (assignee: @adamsitnik)
- #2055 Comment after
breaks generated project - #2059 BenchmarkDotNet misreports .Net Framework as 4.8.1 (assignee: @adamsitnik)
- #2063 BenchmarkDotNet nightly fails to disassemble .Net 7.0 properly
- #2074 DisassemblyDiagnoser producing invalid disassembly (assignee: @adamsitnik)
Merged pull requests (124)
- #1621 Hide columns for multiple runtime (by @marcnet80)
- #1769 Make wasm-interpreter work like wasm-aot (by @naricc)
- #1776 Clarify effects of IterationSetup on UnrollFactor and InvocationCount (by @SnakyBeaky)
- #1790 Bugfix in ImmutableConfigBuilder. Fixes #1789 (by @mawosoft)
- #1796 fixes(configuration): Not unique exporter for exporter type (by @workgroupengineering)
- #1797 Update DotNetCliCommandExecutor.cs (by @Distinctlyminty)
- #1801 Include RatioStyle in SummaryStyle.Equals()/GetHashCode(). Fixes #1800. (by @mawosoft)
- #1805 Update PackageReference for System.Management to latest (5.0.0). (by @mawosoft)
- #1810 Fix null reference exceptions in SmartParameter. Fixes #1809 (by @mawosoft)
- #1811 [WASM][AOT] Do not include KernelTraceControl in WasmAssembliesToBundle (by @naricc)
- #1816 Add net70 runtime support (by @am11)
- #1823 Replace colon if present in folder name (by @ronbrogan)
- #1828 Ensure proper SummaryStyle handling (by @mawosoft)
- #1835 Enable mono llvmaot tool chain to work with net7 (by @naricc)
- #1841 Fix argument escaping (by @adamsitnik)
- #1842 Preserve EnablePreviewFeatures csproj setting (by @kkokosa)
- #1846 [wasm] fix perf after test renames (by @pavelsavara)
- #1847 Use non-deprecated macOS pool on Azure Pipelines (by @akoeplinger)
- #1848 align both Executors to use the same timeout (2s) (by @adamsitnik)
- #1850 Added exporter custom path to docs #1819 (by @asaf92)
- #1854 Fix size specifier (by @YegorStepanov)
- #1855 Change DisassemblyDiagnoser to use byte unit always (by @YegorStepanov)
- #1858 Bugfix for merged PR #1855 (by @mawosoft)
- #1859 Add Allocation Ratio column (by @YegorStepanov)
- #1861 JitDiagnosers should print an error when run on non-Windows OS (by @adamsitnik)
- #1865 Bump Cake to 2.0.0, adopt frosting project style (by @AndreyAkinshin)
- #1866 Respect LogicalGroup order in DefaultOrderer (see #1864) (by @AndreyAkinshin)
- #1870 UserInteraction: don't loop when reaching the input end. (by @tmds)
- #1873 add EnablePreviewFeatures to the list of settings copied by BDN to the auto-generated project (by @adamsitnik)
- #1874 disable ReSharper's Dynamic Program Analysis by default (by @adamsitnik)
- #1885 Comeback of power management (by @YegorStepanov)
- #1888 Added IntermediateOutputPath option to MonoAotCompiler task parameters (by @naricc)
- #1890 Hiding columns (by @YegorStepanov)
- #1896 Fix warnings (by @adamsitnik)
- #1897 set TreatWarningsAsErrors to true (by @adamsitnik)
- #1902 Handled exceptions from exporters in CompositeExporter (by @epeshk)
- #1903 don't use diagnosers when running the benchmark has failed (by @adamsitnik)
- #1906 Improve BuildTimeout (by @adamsitnik)
- #1907 ensure the default order of benchmarks is the same as declared in source code (by @adamsitnik)
- #1909 Log progress and estimated finish time (by @adamsitnik)
- #1910 Make FromUrl and FromSource more friendly (by @YegorStepanov)
- #1912 Notified users about private methods with Setup/Cleanup attributes (by @epeshk)
- #1915 JsonExporter: make Json export more extensible. (by @ptr1120)
- #1916 [WASM] Fix rename of main.js to test-main.js (by @naricc)
- #1917 Don't run Analyzers for the generated project + Roslyn workaround (by @adamsitnik)
- #1919 Restore BytesAllocatedPerOperation for JSON and XML (by @martincostello)
- #1921 Improve failure handling and finish time estimation (by @adamsitnik)
- #1926 Fix typo in WasmCsProj.txt (by @lewing)
- #1930 Display correct default InvocationCount in SummaryTable, fixes #1929 (by @AndreyAkinshin)
- #1932 [wasm] Set the right runtime moniker (by @radekdoulik)
- #1935 Fix optimization of action methods for coreclr (by @AndyAyersMS)
- #1936 [wasm] Improve the autogenerated project (by @radical)
- #1938 [wasm] Add a
--wasmDataDir
parameter (by @radical) - #1939 Update contributing docs (by @adamsitnik)
- #1940 Don't use blocking acknowledgments when there is no need to (by @adamsitnik)
- #1945 AsyncProcessOutputReader: Use ConcurrentQueue instead of ConcurrentStack (by @radical)
- #1946 improve error message for users who pass path to Core_Root instead of CoreRun (by @adamsitnik)
- #1947 Executor: Don't use Process.ExitCode, unless the process has exited (by @radical)
- #1949 Revise heuristic for initial jitting. (by @AndyAyersMS)
- #1950 DotNetCli*: Allow logging command output (by @radical)
- #1953 add possibility to enable build output logging via command line args (by @adamsitnik)
- #1955 Cleaning up argument spacing in CLI calls. Add output path for publish. CoreRT (by @Beau-Gosse-dev)
- #1958 fix broken pipe issue (by @adamsitnik)
- #1959 add
--justBuild
for users who want to reuse code produced by BDN without running the benchmarks (by @adamsitnik) - #1960 Improve support for NativeAOT (by @adamsitnik)
- #1961 disable AwaitingTasksShouldNotInterfereAllocationResults test (by @adamsitnik)
- #1965 Rename CoreRT to NativeAOT (by @adamsitnik)
- #1966 Actually AOT things in AOT mode; prevent JIT fall back (by @naricc)
- #1969 Fixed FreeBSD shared library extension in MonoAOTLLVM tool chain. (by @naricc)
- #1970 Add new
--generateBinLog
to generate msbuild binlogs, with names (by @radical) - #1972 [NativeAOT] Set TrimmerDefaultAction to link (by @adamsitnik)
- #1973 don't place DynamicallyAccessedMembers on an array (by @adamsitnik)
- #1974 Update ArtifactFileNameHelper error message (by @eiriktsarpalis)
- #1975 Addressing code review suggestions (by @adamsitnik)
- #1976 Add support for Rd.xml file around project file (by @kant2002)
- #1978 Migrate from .NET 5 to .NET 6.0 (by @kant2002)
- #1979 Remove CPP codegen for NativeAOT (by @kant2002)
- #1981 Fix for issue NETSDK1150 (by @OlegOLK)
- #1982 DotNetCliCommand: Add new
RetryFailedBuildWithNoDeps
property (by @radical) - #1984 Reduce generated code size (by @adamsitnik)
- #1985 don't emit debug symbols on platforms where it does not work well (by @adamsitnik)
- #1986 the CI must run net6.0, not net5.0 tests (by @adamsitnik)
- #1987 Fix AppVeyor build (by @adamsitnik)
- #1988 re-enable NativeAOT tests on GitHub Actions Windows (by @adamsitnik)
- #1990 [Mono] Change AOT mode to Normal AOT with LLVM JIT fall back (by @fanyang-mono)
- #1994 NativeAOT: IlcOptimizationPreference & IlcInstructionSet (by @adamsitnik)
- #1996 use AnyCPU for S390x (by @adamsitnik)
- #1997 Update NativeAOT docs, fix the support for local NativeAOT builds (by @adamsitnik)
- #2002 when user specifies both --runtimes and --corerun, multiple independent jobs should be created (by @adamsitnik)
- #2006 when Host process is not .NET Core, CoreRunToolchain should use latest available TFM (by @adamsitnik)
- #2008 Use PackageIcon property (by @martincostello)
- #2012 Cleanup dependencies and add net6.0 TFM (by @martincostello)
- #2019 Update Iced to its latest version. (by @teo-tsirpanis)
- #2020 Opt out of metadata trimming (by @MichalStrehovsky)
- #2023 don't run NativeAOT tests on AppVeyor Windows (by @adamsitnik)
- #2029 don't emit debug symbols for samples and test projects (by @adamsitnik)
- #2030 update TraceEvent to 3.0.1 to have a proper ARM64 support for Diagnostics package (by @adamsitnik)
- #2033 Bugfix MetricColumn: Respect unit when formatting values. (by @mawosoft)
- #2035 net461->net462 in Samples, Diagnosers, Tests (by @AndreyAkinshin)
- #2040 Port the .NET (Core) disassembler to ClrMd v2 (by @adamsitnik)
- #2041 Bugfix SmartParameter source code generation (by @mawosoft)
- #2042 Fix WmicCpuInfoProvider documentation (by @msitt)
- #2043 restore Microsoft.DotNet.PlatformAbstraction dependency (by @adamsitnik)
- #2044 add .NET 4.8.1 support (by @adamsitnik)
- #2045 adopt to recent NativeAOT changes (by @adamsitnik)
- #2046 Make a bit of BenchmarkDotNet trimmable (by @MichalStrehovsky)
- #2047 Restrict what's published to AppVeyor NuGet feed (BDN nightly) (by @mawosoft)
- #2050 Fix DocFx configuration and build (by @mawosoft)
- #2051 extend printed Runtime Info with simple Hardware Intrinsics information (by @adamsitnik)
- #2052 Address code review feedback (by @adamsitnik)
- #2056 Bugfix copied project settings (by @mawosoft)
- #2065 Add serialize to NativeAOT (by @MichalPetryka)
- #2066 Print Vector width in summary on older runtimes (by @MichalPetryka)
- #2067 fix .NET 4.8.1 detection (by @adamsitnik)
- #2068 print error when users try DisassemblyDiagnoser with NativeAOT (by @adamsitnik)
- #2071 use ClrMd v2 disassembler on Windows whenever possible (by @adamsitnik)
- #2072 Add glob filters support to disassembler to allow disassembling specific methods (by @adamsitnik)
- #2073 add two fallbacks to CoreRun copying (by @adamsitnik)
- #2075 Fix disassembler (by @adamsitnik)
- #2078 More disassembler improvements (by @adamsitnik)
- #2079 fix the CI (by @adamsitnik)
- #2081 JsonExporter: make Json export more extensible. (by @ptr1120)
- #2082 remove last warning (by @adamsitnik)
- #2084 Release notes for 0.13.2 (by @adamsitnik)
Commits (147)
- 4de165 Postrelease v0.13.1 update (by @AndreyAkinshin)
- 74e3c4 Make wasm-interpreter work like wasm-aot (#1769) (by @naricc)
- 1a8296 Better snap support, fix #1753 (by @AndreyAkinshin)
- aa9167 Clarify effects of IterationSetup on UnrollFactor and InvocationCount (#1776) (by @SnakyBeaky)
- 937865 Set allow unsafe blocks to true. (#1779) (by @naricc)
- e08b79 Bugfix in ImmutableConfigBuilder. Fixes #1789 (#1790) (by @mawosoft)
- 156fd6 Fix an logger message typo in the DotNetCliCommandExecutor Execute method, fi... (by @Distinctlyminty)
- d312ed Include RatioStyle in SummaryStyle.Equals()/GetHashCode(). Fixes #1800. (#1801) (by @mawosoft)
- 38b99b Update PackageReference for System.Management to latest (5.0.0). (#1805) (by @mawosoft)
- e9a569 [WASM][AOT] Do not include KernelTraceControl in WasmAssembliesToBundle (#1811) (by @naricc)
- 80044a Fix null reference exceptions in SmartParameter. Fixes #1809 (#1810) (by @mawosoft)
- 273113 Add tests for the case when ParamsSource contains null (by @AndreyAkinshin)
- a5176a Add net7.0 runtime support (#1816) (by @am11)
- 7e757d Replace colon if present in folder name (#1823) (by @ronbrogan)
- 24e041 Use non-deprecated Azure Pipelines Ubuntu pool (#1829) (by @akoeplinger)
- beb543 Enable mono llvmaot tool chain to work with net7 (#1835) (by @naricc)
- 8a88b4 Ensure proper SummaryStyle handling (#1828) (by @mawosoft)
- 559d18 Fix argument escaping (#1841) (by @adamsitnik)
- 5927a6 Preserve EnablePreviewFeatures csproj setting (#1842) (by @kkokosa)
- db0a88 [wasm] fix perf after test renames (#1846) (by @pavelsavara)
- dddc1e Use non-deprecated macOS pool on Azure Pipelines (#1847) (by @akoeplinger)
- e62dc2 align both Executors to use the same timeout (2s) (#1848) (by @adamsitnik)
- 7d5a8f Added exporter custom path to docs #1819 (#1850) (by @asaf92)
- 7b0211 Fix size specifier (#1854), fixes #1727 (by @YegorStepanov)
- 34817b Change DisassemblyDiagnoser to use byte unit always (#1855) (by @YegorStepanov)
- 0c03e8 Bugfix for merged PR #1855 (#1858) (by @mawosoft)
- f00f7c JitDiagnosers should print an error when run on non-Windows OS (#1861) (by @adamsitnik)
- 956051 Add Allocation Ratio column (#1859) (by @YegorStepanov)
- 42c718 Categories should have the highest priority in logical group order, fixes #1864 (by @AndreyAkinshin)
- 6f6de0 Introduce BenchmarkRunner.Run(Type[] types) (by @AndreyAkinshin)
- 408786 Use Cake.FileHelpers 4.0.1 (by @AndreyAkinshin)
- 130f0f Additional diagnostics in WindowsDisassembler (see #1836) (by @AndreyAkinshin)
- 189e68 Fix GroupExporterTest (by @AndreyAkinshin)
- 61c447 Remove travis badges (by @AndreyAkinshin)
- e17992 Bump Cake to 2.0.0, adopt frosting project style (#1865) (by @AndreyAkinshin)
- bb180a Remove .travis.yml (by @AndreyAkinshin)
- f188f7 Respect LogicalGroup order in DefaultOrderer (see #1864) (#1866) (by @AndreyAkinshin)
- 7e19f3 Enable GitHub actions (by @AndreyAkinshin)
- ed53a3 Add GitHub Actions build status badge (by @AndreyAkinshin)
- 195cfd Support Windows 11 in OsBrandStringHelper (by @AndreyAkinshin)
- 5145d1 Fix documentation build tasks (by @AndreyAkinshin)
- 988dbf Update docs/articles/contributing/documentation.md (by @AndreyAkinshin)
- f17453 UserInteraction: don't loop when reaching the input end. (#1870) (by @tmds)
- 23d115 force High Performance Mode by default, fixes #1506 (#1885) (by @YegorStepanov)
- 328573 Added IntermediateOutputPath option to MonoAotCompiler task parameters (#1888) (by @naricc)
- 26ed31 set JETBRAINS_DPA_AGENT_ENABLE by default to 0 to disable ReSharper's Dynamic... (by @adamsitnik)
- 625b2c Fix warnings (#1896) (by @adamsitnik)
- 4b8821 Handled exceptions from exporters in CompositeExporter. Preventing benchmark ... (by @epeshk)
- 6ca6c6 don't use diagnosers when running the benchmark has failed (#1903) (by @adamsitnik)
- 6d2739 Improve BuildTimeout (#1906) (by @adamsitnik)
- 3ea212 ensure the default order of benchmarks is the same as declared in source code... (by @adamsitnik)
- 05bb3d Log progress and estimated finish time (#1909) (by @adamsitnik)
- 11751a Don't run Analyzers for the generated project + Roslyn workaround (#1917) (by @adamsitnik)
- 80f45c [WASM] Fix rename of main.js to test-main.js (#1916) (by @naricc)
- 32bb2d Improve failure handling and finish time estimation (#1921) (by @adamsitnik)
- 9ff0f9 Restore BytesAllocatedPerOperation for JSON and XML (#1919) (by @martincostello)
- 569f4f Add macOS Monterey test case in OsBrandStringTests (by @AndreyAkinshin)
- 63c0ce Notified users about private methods with Setup/Cleanup attributes (#1912) (by @epeshk)
- c1f210 fixes(configuration): Not unique exporter for exporter type (#1796) (by @workgroupengineering)
- bd0872 Rollback logicalGroupRules to List (by @AndreyAkinshin)
- c303ad Fix typo in WasmCsProj (#1926) (by @lewing)
- f1aefb Display correct default InvocationCount in SummaryTable, fixes #1929 (#1930) (by @AndreyAkinshin)
- ca5103 [wasm] Set the right runtime moniker (#1932) (by @radekdoulik)
- fa5984 [wasm] Improve the autogenerated project (#1936) (by @radical)
- b78ec9 Fix optimization of action methods for coreclr (#1935) (by @AndyAyersMS)
- 13f4ea Don't use blocking acknowledgments when there is no need to (#1940) (by @adamsitnik)
- 8ce19e [wasm] Add a
--wasmDataDir
parameter (#1938) (by @radical) - 9b990d AsyncProcessOutputReader: Use ConcurrentQueue instead of ConcurrentStack (#1945) (by @radical)
- 937311 Revise heuristic for initial jitting. (#1949) (by @AndyAyersMS)
- 228a6a improve error message for users who pass path to Core_Root instead of CoreRun... (by @adamsitnik)
- 1d34f8 DotNetCli*: Allow logging command output (#1950) (by @radical)
- 01ead5 Executor: Don't use Process.ExitCode, unless the process has exited (#1947) (by @radical)
- 8e3d13 add possibility to enable build output logging via command line args (#1953) (by @adamsitnik)
- 6fa333 Cleaning up argument spacing in CLI calls. Add output path for publish. CoreR... (by @Beau-Gosse-dev)
- 010ac2 don't redirect standard input and don't write Acknowledgment to it if acknowl... (by @adamsitnik)
- d66289 Improve support for NativeAOT (#1960) (by @adamsitnik)
- 0868da disable AwaitingTasksShouldNotInterfereAllocationResults for InProcess toolch... (by @adamsitnik)
- 41a151 Rename CoreRT to NativeAOT (#1965) (by @adamsitnik)
- 9c1c27 [Mono] Actually AOT things in AOT mode; prevent JIT fall back (#1966) (by @naricc)
- ed6529 Fixed FreeBSD shared library extension in MonoAOTLLVM tool chain. (#1969) (by @naricc)
- 19679d Set TrimmerDefaultAction to link to ensure that trimmer only analyzes the par... (by @adamsitnik)
- e2d41b don't place DynamicallyAccessedMembers on an array (#1973) (by @adamsitnik)
- 09d939 Update ArtifaceFileNameHelper error message (#1974) (by @eiriktsarpalis)
- cac918 Add new
--generateBinLog
to generate msbuild binlogs, with names (#1970) (by @radical) - 5f0db4 Add support for LoongArch64. (#1971) (by @LuckyXu-HF)
- 56556a Add support for Rd.xml file around project file (#1976) (by @kant2002)
- 804ed9 Remove CPP codegen for NativeAOT (#1979) (by @kant2002)
- 190d07 Fix for issue NETSDK1150 (#1981) (by @OlegOLK)
- a57819 Migrate from .NET 5 to .NET 6.0 (#1978) (by @kant2002)
- 74086a Addressing code review suggestions (#1975) (by @adamsitnik)
- 5fdafb Update contributing docs (#1939) (by @adamsitnik)
- ca43aa DotNetCliCommand: Add new
RetryFailedBuildWithNoDeps
property (#1982) (by @radical) - bbe6ab Reduce generated code size (#1984) (by @adamsitnik)
- 31de77 the CI must run net6.0, not net5.0 tests (#1986) (by @adamsitnik)
- 554127 Fix AppVeyor build (#1987) (by @adamsitnik)
- a0035f re-enable NativeAOT tests on GitHub Actions Windows (#1988) (by @adamsitnik)
- 163f40 don't emit debug symbols (#1985) (by @adamsitnik)
- 35ba9d Change aot mode to normal aot with LLVM JIT fall back (#1990) (by @fanyang-mono)
- 1c935d NativeAOT: IlcOptimizationPreference & IlcInstructionSet (#1994) (by @adamsitnik)
- c165ba use AnyCPU for S390x, fixes #1711 (#1996) (by @adamsitnik)
- f4e8de Update NativeAOT docs, fix the support for local NativeAOT builds (#1997) (by @adamsitnik)
- 9e173d Fix typo in README (by @AndreyAkinshin)
- a79881 when user specifies both --runtimes and --corerun, multiple independent jobs ... (by @adamsitnik)
- 5e6275 when Host process is not .NET Core, CoreRunToolchain should use latests avail... (by @adamsitnik)
- b09431 Opt out of metadata trimming (#2020) (by @MichalStrehovsky)
- 5448d4 Update Iced to its latest version. (#2019) (by @teo-tsirpanis)
- fcda33 Use PackageIcon property (#2008) (by @martincostello)
- 72fce9 don't run NativeAOT tests on AppVeyor, as one of them takes 3 minutes and we ... (by @adamsitnik)
- 14f9cf don't emit debug symbols for samples and test projects as it breaks arm64 win... (by @adamsitnik)
- fd4a9c update TraceEvent to 3.0.1 to have a proper ARM64 support for Diagnostics pac... (by @adamsitnik)
- 8deec6 Bugfix MetricColumn: Respect unit when formatting values. (by @mawosoft)
- 9216a7 Add MetricColumnTests (by @AndreyAkinshin)
- 23f995 net461->net462 in Samples, Diagnosers, Tests (#2035) (by @AndreyAkinshin)
- 762b76 Cleanup dependencies and add net6.0 TFM (#2012) (by @martincostello)
- d24ea3 Port the .NET (Core) disassembler to ClrMd v2 (#2040) (by @adamsitnik)
- 6eb280 Fix WmicCpuInfoProvider comment (#2042) (by @msitt)
- f72e61 restore Microsoft.DotNet.PlatformAbstraction dependency (#2043) (by @adamsitnik)
- 99ef3f add .NET 4.8.1 support (#2044) (by @adamsitnik)
- 118135 adopt to recent NativeAOT changes (#2045) (by @adamsitnik)
- 96b376 Make a bit of BenchmarkDotNet trimmable (#2046) (by @MichalStrehovsky)
- e4ff20 Bugfix SmartParameter source code generation (#2041) (by @mawosoft)
- 461b70 Added the kernel keyword as a parameter to the ETWConfig (#2049) (by @mrsharm)
- d6020e Restrict what's published to AppVeyor NuGet feed (BDN nightly) (#2047) (by @mawosoft)
- 32ddeb provide Hardware Intrinsics information (#2051) (by @adamsitnik)
- 2e943e Fix DocFx configuration and build (by @mawosoft)
- 8c963b Reverting DocFX_Build dependency on Build (by @mawosoft)
- 48ecbc add missing hardware intrinsic info (#2052) (by @adamsitnik)
- b4c44c Bugfix copied project settings (#2056) (by @mawosoft)
- 2dc6c9 Add serialize to NativeAOT (#2065) (by @MichalPetryka)
- 7fb872 Print Vector width in summary on older runtimes (#2066) (by @MichalPetryka)
- 8e355b fix .NET 4.8.1 detection (#2067) (by @adamsitnik)
- 0f457d print error when users try DisassemblyDiagnoser with NativeAOT (#2068) (by @adamsitnik)
- b79282 use ClrMd2Disassembler on Windows whenever possible (#2071) (by @adamsitnik)
- a5b0e9 Add glob filters support to disassembler to allow disassembling specific meth... (by @adamsitnik)
- cab43e add two fallbacks to CoreRun copying (#2073) (by @adamsitnik)
- 4924f0 Fix few new disassembler bugs caused by update to ClrMd v2 (#2075) (by @adamsitnik)
- c99ba3 More disassembler improvements (#2078) (by @adamsitnik)
- 6bb61c Make FromUrl and FromSource more friendly (#1910) (by @YegorStepanov)
- 387ca0 fix the CI (#2079) (by @adamsitnik)
- 52d770 set TreatWarningsAsErrors to true (#1897) (by @adamsitnik)
- a11b49 JsonExporter: make Json export more extensible. (#2081) (by @ptr1120)
- 1424cf remove last warning that happens during pack command for master branch build ... (by @adamsitnik)
- 838000 Hide columns for multiple runtime (#1621) (by @marcnet80)
- 8ec00d Hiding columns (#1890) (by @YegorStepanov)
- e0dbce Release notes for 0.13.2 (#2084) (by @adamsitnik)
- f6f335 Prepare v0.13.2 changelog (by @AndreyAkinshin)
- 186998 Set library version: 0.13.2 (by @AndreyAkinshin)
Contributors (34)
- Adam Sitnik (@adamsitnik)
- Adeel Mujahid (@am11)
- Alexander Köplinger (@akoeplinger)
- Andrey Akinshin (@AndreyAkinshin)
- Andrii Kurdiumov (@kant2002)
- Andy Ayers (@AndyAyersMS)
- Ankit Jain (@radical)
- Asaf Agami (@asaf92)
- Beau Gosse (@Beau-Gosse-dev)
- Eirik Tsarpalis (@eiriktsarpalis)
- Evgeny Peshkov (@epeshk)
- Fan Yang (@fanyang-mono)
- James MIllar (@Distinctlyminty)
- Konrad Kokosa (@kkokosa)
- Larry Ewing (@lewing)
- marcnet80 (@marcnet80)
- Marland Sitt (@msitt)
- Martin Costello (@martincostello)
- Matthias Wolf (@mawosoft)
- Michał Petryka (@MichalPetryka)
- Michal Strehovský (@MichalStrehovsky)
- Mukund Raghav Sharma (Moko) (@mrsharm)
- Nathan Ricci (@naricc)
- OlegOLK (@OlegOLK)
- Oriol Mesa (@SnakyBeaky)
- Pavel Savara (@pavelsavara)
- Peter Bruch (@ptr1120)
- Radek Doulik (@radekdoulik)
- Ron Brogan (@ronbrogan)
- Theodore Tsirpanis (@teo-tsirpanis)
- Tom Deseyn (@tmds)
- workgroupengineering (@workgroupengineering)
- Xu Liangyu (@LuckyXu-HF)
- Yegor Stepanov (@YegorStepanov)
Thank you very much!
Additional details
Date: August 26, 2022
Milestone: v0.13.2 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.2
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.2
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.2
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.2
BenchmarkDotNet v0.13.1
BenchmarkDotNet v0.13.1 is a service update with various bug fixes and improvements.
Highlights
- S390x architecture support (#1712)
- Various WASM toolchain improvements (#1719, #1722, #1729, #1742, #1743, #1744, #1746, #1757, #1763)
- Support of CoreRT on 5.0.3XX SDK (#1725)
- Using Utf8 for reading from standard input (fixes a nasty encoding-related bug) (#1735)
- Adjusting WaitForExit timeouts (#1745)
- Support for returning unmanaged types from benchmarks with InProcessToolchain (#1750)
- Disabled Tiered JIT (#1751)
- A MemoryDiagnoser bug fix (#1762)
- Allow users to hide Gen X columns (#1764)
- Copy GC settings from host process to the benchmark process (#1765)
- Do not split surrogates in shortified parameter values (#1705)
Milestone details
In the v0.13.1 scope, 3 issues were resolved and 23 pull requests were merged. This release includes 36 commits by 10 contributors.
Resolved issues (3)
- #1703 Unable to run benchmark when
ParamsSource
refers to string with surrogate pairs - #1713 System.NotSupportedException: Unknown Acknowledgment: Acknowledgment when running in a github action (assignee: @adamsitnik)
- #1714 AwaitingTasksShouldNotInterfereAllocationResults is flaky (assignee: @adamsitnik)
Merged pull requests (23)
- #1705 do not split surrogates in
ParameterInstance.ToDisplayText()
(by @novak-as) - #1710 Fix typo (by @martincostello)
- #1712 add S390x architecture support (by @adamsitnik)
- #1719 Added UsingBrowserRuntimeWorkload (by @naricc)
- #1722 Add AOT options to wasm runtime (by @naricc)
- #1725 Add ValidateExecutableReferencesMatchSelfContained (by @kant2002)
- #1729 Naricc/validate executable references match self contained (by @naricc)
- #1735 Use Utf8 not just for writing to standard output, but also for reading from standard input (by @adamsitnik)
- #1739 Add support for returning unmanaged types from benchmarks (by @kant2002)
- #1742 Fix WasmAssembliesToBundle item is empty error (by @radekdoulik)
- #1743 Add linker description for wasm AOT (by @radekdoulik)
- #1744 Make mono/wasm run on Windows (by @radekdoulik)
- #1745 Fix #1731. (by @cgranade)
- #1746 Make PrepareForWasmBuild work with wasm workload (by @radekdoulik)
- #1748 Fix typo in docs (by @Jlobblet)
- #1750 Fix pointer-returning benchmarks support for InProcessToolchain (by @adamsitnik)
- #1751 disable TieredJit so it's background allocations don't show up in allocated memory reported by MemoryDiagnoser tests (by @adamsitnik)
- #1757 [wasm] Add WasmMainJSPath in interpreter projects (by @radekdoulik)
- #1762 MemoryDiagnoser fix (by @adamsitnik)
- #1763 Pr wasm set runtimesrcdir for interpreter (by @naricc)
- #1764 Allow users to hide Gen X columns (by @adamsitnik)
- #1765 Copy GC settings from host process (by @adamsitnik)
- #1768 Fix typo in README (by @eugene-g)
Commits (36)
- fe1124 Postrelease update of v0.13.0 changelog (by @AndreyAkinshin)
- 0388db Update build-and-pack.cmd (by @AndreyAkinshin)
- 5c8469 Set release date for v0.13.0 (by @AndreyAkinshin)
- 601a1a Fix typo (#1710) (by @martincostello)
- 5bc925 do not split surrogates in
ParameterInstance.ToDisplayText()
(#1705) (by @novak-as) - 891e57 Add unicode testcases in ParameterInstanceTests.MaxParameterColumnWidthCanBeC... (by @AndreyAkinshin)
- 5d2160 Update changelog files (by @AndreyAkinshin)
- bbc4b4 add S390x architecture support (#1712) (by @adamsitnik)
- bf54f0 Fix flakiness in ThreadingDiagnoserTests (by @AndreyAkinshin)
- 6ffdb2 [WASM] Added UsingBrowserRuntimeWorkload (#1719) (by @naricc)
- 5196e6 Add AOT options to wasm runtime (#1722) (by @naricc)
- d97285 Add ValidateExecutableReferencesMatchSelfContained (#1725) (by @kant2002)
- cb23e1 Delete .BenchmarkDotNet.Samples.csproj.swp (#1726) (by @naricc)
- 75f632 Set ValidateExecutableReferencesMatchSelfContained for Wasm (#1729) (by @naricc)
- 9e7e50 Added
false to Wasm cs proj. (#1734) (by @naricc) - e7ff4c Use Utf8 not just for witing to standard output, but also for reading from st... (by @adamsitnik)
- 081563 Added UsingBrowserRuntimeWorkload false. (#1741) (by @naricc)
- 2fefdb Fix WasmAssembliesToBundle item is empty error (#1742) (by @radekdoulik)
- 6b475f Add linker description for wasm AOT (#1743) (by @radekdoulik)
- acb6f2 Make mono/wasm run on Windows (#1744) (by @radekdoulik)
- 4b3d19 Make PrepareForWasmBuild work with wasm workload (#1746) (by @radekdoulik)
- 141ef7 handle processes that don't exit on time more gracefully, fixes #1731. (#1745) (by @cgranade)
- c3fb7b Add support for returning unmanaged types from benchmarks (#1739) (by @kant2002)
- 6f453b [wasm] Allow unsafe code (#1752) (by @radekdoulik)
- c2cee2 Fix the CI (by @radekdoulik)
- 19cbef Fix typo in docs (#1748) (by John Blundell)
- 1a94d4 [wasm] Add WasmMainJSPath in interpreter projects (#1757) (by @radekdoulik)
- 37ec19 Get rid of warning (#1760) (by @radekdoulik)
- 4bd433 use benchmark process runtime, not host process runtime when deciding whether... (by @adamsitnik)
- 8cb701 Update OsBrandStringHelper (by @AndreyAkinshin)
- 8f81b5 Copy GC settings from host process (#1765) (by @adamsitnik)
- f37266 Allow users to hide Gen X columns (#1764) (by @adamsitnik)
- f9a4c1 [WASM] set runtimesrcdir for interpreter (#1763) (by @naricc)
- 9e674d Fix typo in README (by @eugene-g)
- 708be4 Prepare v0.13.1 changelog (by @AndreyAkinshin)
- a93681 Set library version: 0.13.1 (by @AndreyAkinshin)
Contributors (10)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Andrii Kurdiumov (@kant2002)
- Cassandra Granade (@cgranade)
- Evgenii Grebeniuk (@eugene-g)
- John Blundell
- Martin Costello (@martincostello)
- Nathan Ricci (@naricc)
- Oleksandr Novak (@novak-as)
- Radek Doulik (@radekdoulik)
Thank you very much!
Additional details
Date: August 11, 2021
Milestone: v0.13.1 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.1
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.1
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.1
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.1
BenchmarkDotNet v0.13.0
It's been a year since our last release. BenchmarkDotNet has been downloaded more than seven million times from nuget.org. It's more than we could have ever possibly imagined! Some could say, that it's also more than we can handle ;) That is why we wanted to once again thank all the contributors who helped us with 0.13.0
release!
Highlights
In BenchmarkDotNet v0.13.0, we have supported various technologies:
- .NET 5 and .NET 6 target framework monikers
- .NET SDK installed via snap
- SingleFile deployment
- Xamarin applications
- WASM applications
- Mono AOT
We have also introduced new features and improvements including:
- Memory randomization
- Method-specific job attributes
- Sortable parameter columns
- Customizable ratio column
- Improved CoreRun and CoreRT support
- Improved Hardware Counters support
Of course, this release includes dozens of other improvements and bug fixes!
Supported technologies
.NET 5, .NET 6, SingleFile and snap
At some point in time, netcoreapp5.0
moniker was changed to net5.0
, which required a fix on our side (#1479, btw we love this kind of changes). Moreover, .NET 5 introduced platform-specific TMFs (example: net5.0-windows10.0.19041.0
) which also required some extra work: #1560, #1691.
In #1523 support for .NET 6 was added.
<TargetFrameworks>net5.0;net5.0-windows10.0.19041.0;net6.0<TargetFrameworks>
In #1686 @am11 has implemented support for single file deployment (supported in .NET 5 onwards).
Last, but not least in #1652 snap support has been implemented.
adam@adsitnik-ubuntu:~/projects/BenchmarkDotNet/samples/BenchmarkDotNet.Samples$ dotnet50 run -c Release -f net5.0 --filter BenchmarkDotNet.Samples.IntroColdStart.Foo
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 1 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// start /snap/dotnet-sdk/112/dotnet restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 /p:Deterministic=true /p:Optimize=true in /home/adam/projects/BenchmarkDotNet/samples/BenchmarkDotNet.Samples/bin/Release/net5.0/9a018ee4-0f33-46dd-9093-01d3bf31233b
// command took 1.49s and exited with 0
// start /snap/dotnet-sdk/112/dotnet build -c Release --no-restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 /p:Deterministic=true /p:Optimize=true in /home/adam/projects/BenchmarkDotNet/samples/BenchmarkDotNet.Samples/bin/Release/net5.0/9a018ee4-0f33-46dd-9093-01d3bf31233b
// command took 2.78s and exited with 0
// ***** Done, took 00:00:04 (4.37 sec) *****
// Found 1 benchmarks:
// IntroColdStart.Foo: Job-NECTOD(IterationCount=5, RunStrategy=ColdStart)
// **************************
// Benchmark: IntroColdStart.Foo: Job-NECTOD(IterationCount=5, RunStrategy=ColdStart)
// *** Execute ***
// Launch: 1 / 1
// Execute: /snap/dotnet-sdk/112/dotnet "9a018ee4-0f33-46dd-9093-01d3bf31233b.dll" --benchmarkName "BenchmarkDotNet.Samples.IntroColdStart.Foo" --job "IterationCount=5, RunStrategy=ColdStart" --benchmarkId 0 in /home/adam/projects/BenchmarkDotNet/samples/BenchmarkDotNet.Samples/bin/Release/net5.0/9a018ee4-0f33-46dd-9093-01d3bf31233b/bin/Release/net5.0
Xamarin support
Thanks to the contributions of the amazing @jonathanpeppers BenchmarkDotNet supports Xamarin! The examples can be found in our repo: iOS, Android.
WASM support
Thanks to the work of @naricc you can now benchmark WASM using Mono Runtime! For more details, please refer to our docs.
#1483, #1498, #1500, #1501, #1507, #1592, #1689.
Mono AOT support
In another awesome contribution (#1662) @naricc has implemented Mono AOT support. The new toolchain supports doing Mono AOT runs with both the Mono-Mini compiler and the Mono-LLVM compiler (which uses LLVM on the back end).
For more details, please go to our docs.
New features and improvements
Memory randomization
In #1587 @adamsitnik has introduced a new, experimental feature called "Memory Randomization".
This feature allows you to ask BenchmarkDotNet to randomize the memory alignment by allocating random-sized byte arrays between iterations and call [GlobalSetup] before every benchmark iteration and [GlobalCleanup]
after every benchmark iteration.
Sample benchmark:
public class IntroMemoryRandomization
{
[Params(512 * 4)]
public int Size;
private int[] _array;
private int[] _destination;
[GlobalSetup]
public void Setup()
{
_array = new int[Size];
_destination = new int[Size];
}
[Benchmark]
public void Array() => System.Array.Copy(_array, _destination, Size);
}
Without asking for the randomization, the objects are allocated in [GlobalSetup]
and their unmodified addresses (and alignment) are used for all iterations (as long as they are not promoted to an older generation by the GC). This is typically the desired behavior, as it gives you very nice and flat distributions:
dotnet run -c Release --filter IntroMemoryRandomization
-------------------- Histogram --------------------
[502.859 ns ; 508.045 ns) | @@@@@@@@@@@@@@@
---------------------------------------------------
But if for some reason you are interested in getting a distribution that is better reflecting the "real-life" performance you can enable the randomization:
dotnet run -c Release --filter IntroMemoryRandomization --memoryRandomization true
-------------------- Histogram --------------------
[108.803 ns ; 213.537 ns) | @@@@@@@@@@@@@@@
[213.537 ns ; 315.458 ns) |
[315.458 ns ; 446.853 ns) | @@@@@@@@@@@@@@@@@@@@
[446.853 ns ; 559.259 ns) | @@@@@@@@@@@@@@@
---------------------------------------------------
Method-specific job attributes
From now, all attributes that derive from JobMutatorConfigBaseAttribute
(full list) can be applied to methods. You no longer have to move a method to a separate type to customize config for it.
[Benchmark]
[WarmupCount(1)]
public void SingleWarmupIteration()
[Benchmark]
[WarmupCount(9)]
public void NineWarmupIterations()
Sortable parameter columns
In order to sort columns of parameters in the results table, you can use the Property Priority
inside the params attribute. The priority range is [Int32.MinValue;Int32.MaxValue]
, lower priorities will appear earlier in the column order. The default priority is set to 0
.
public class IntroParamsPriority
{
[Params(100)]
public int A { get; set; }
[Params(10, Priority = -100)]
public int B { get; set; }
[Benchmark]
public void Benchmark() => Thread.Sleep(A + B + 5);
}
Method | B | A | Mean | Error | StdDev |
---|---|---|---|---|---|
Benchmark | 10 | 100 | 115.4 ms | 0.12 ms | 0.11 ms |
This feature got implemented by @JohannesDeml in #1612.
Customizable ratio column
Now it's possible to customize the format of the ratio column.
[Config(typeof(Config))]
public class IntroRatioStyle
{
[Benchmark(Baseline = true)]
public void Baseline() => Thread.Sleep(1000);
[Benchmark]
public void Bar() => Thread.Sleep(150);
[Benchmark]
public void Foo() => Thread.Sleep(1150);
private class Config : ManualConfig
{
public Config()
{
SummaryStyle = SummaryStyle.Default.WithRatioStyle(RatioStyle.Trend);
}
}
}
| Method | Mean | Error | StdDev | Ratio | RatioSD |
|--------- |-----------:|--------:|--------:|-------------:|--------:|
| Baseline | 1,000.6 ms | 2.48 ms | 0.14 ms | baseline | |
| Bar | 150.9 ms | 1.30 ms | 0.07 ms | 6.63x faster | 0.00x |
| Foo | 1,150.4 ms | 5.17 ms | 0.28 ms | 1.15x slower | 0.00x |
This feature was implemented in #731.
Improved CoreRun support
BenchmarkDotNet was reporting invalid .NET Core version number when comparing performance using CoreRuns built from dotnet/corefx
and dotnet/runtime
. Fixed by @adamsitnik in #1580
In #1552 @stanciuadrian has implemented support for all GcMode
characteristics for CoreRunToolchain
. Previously the settings were just ignored, now they are being translated to corresponding COMPlus_*
env vars.
Improved CoreRT support
CoreRT has moved from https://github.com/dotnet/corert/ to https://github.com/dotnet/runtimelab/tree/feature/NativeAOT and we had to update the default compiler version and nuget feed address. Moreover, there was a bug in CoreRtToolchain
which was causing any additional native dependencies to not work.
Big thanks to @MichalStrehovsky, @jkotas and @kant2002 for their help and support!
Command-line argument support in BenchmarkRunner
So far only BenchmarkSwitcher
was capable of handling console line arguments. Thanks to @chan18 BenchmarkRunner
supports them as well (#1292):
public class Program
{
public static void Main(string[] args) => BenchmarkRunner.Run(typeof(Program).Assembly, args: args);
}
New API: ManualConfig.CreateMinimumViable
ManualConfig.CreateEmpty
creates a completely empty config. Without adding a column provider and a logger to the config the users won't see any results being printed. In #1582 @adamsitnik has introduced a new method that creates minimum viable config:
IConfig before = ManualConfig.CreateEmpty()
.AddColumnProvider(DefaultColumnProviders.Instance)
.AddLogger(ConsoleLogger.Default);
IConfig after = ManualConfig.CreateMinimumViable();
Benchmarking NuGet packages from custom feeds
In #1659 @workgroupengineering added the possibility to indicate the source of the tested nuget package and whether it is a pre-release version.
Deterministic benchmark builds
BenchmarkDotNet is now always enforcing Deterministic builds (#1489) and Optimizations enabled (#1494) which is a must-have if you are using custom build configurations. MSBuild enforces optimizations only for configurations that are named Release
(the comparison is case-insensitive).
<ItemGroup Condition=" '$(Configuration)' == 'X' ">
<PackageReference Include="SomeLibThatYouWantToBenchmark" Version="1.0.0" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)' == 'Y' ">
<PackageReference Include="SomeLibThatYouWantToBenchmark" Version="2.0.0" />
</ItemGroup>
var config = DefaultConfig.Instance
.AddJob(Job.Default.WithCustomBuildConfiguration("X").WithId("X").AsBaseline())
.AddJob(Job.Default.WithCustomBuildConfiguration("Y").WithId("Y"));
Improved Hardware Counters support
BenchmarkDotNet is being used by the .NET Team to ensure that .NET is not regressing. More than three thousand benchmarks (they can be found here) are being executed multiple times a day on multiple hardware configs. Recently, .NET Team started to use InstructionsRetired
to help to filter unstable benchmarks that report regressions despite not changing the number of instructions retired. This has exposed few bugs in Hardware Counters support in BenchmarkDotNet, which all got fixed by @adamsitnik in #1547 and #1550. Moreover, we have removed the old PmcDiagnoser and extended EtwProfiler with the hardware counters support. It's just much more accurate and futureproof. For details, please go to #1548.
How stable was PmcDiagnoser
(same benchmarks run twice in a row on the same machine):
Method | Runtime | InstructionRetired/Op |
---|---|---|
Burgers_0 | .NET 5.0 | 845,746 |
Burgers_0 | .NET Core 2.1 | 30,154,151 |
Burgers_0 | .NET Framework 4.6.1 | 4,230,848 |
Method | Runtime | InstructionRetired/Op |
---|---|---|
Burgers_0 | .NET 5.0 | 34,154,524 |
Burgers_0 | .NET Core 2.1 | 246,534,203 |
Burgers_0 | .NET Framework 4.6.1 | 2,607,686 |
How stable is EtwProfiler
:
Method | Runtime | InstructionRetired/Op |
---|---|---|
Burgers_0 | .NET 5.0 | 3,069,978,261 |
Burgers_0 | .NET Core 2.1 | 3,676,000,000 |
Burgers_0 | .NET Framework 4.6.1 | 3,468,866,667 |
Method | Runtime | InstructionRetired/Op |
---|---|---|
Burgers_0 | .NET 5.0 | 3,066,810,000 |
Burgers_0 | .NET Core 2.1 | 3,674,666,667 |
Burgers_0 | .NET Framework 4.6.1 | 3,468,600,000 |
Moreover, in #1540 @WojciechNagorski has added the removal of temporary files created by EtwProfiler
.
Improved Troubleshooting
We have the possibility to ask BDN to stop on the first error: --stopOnFirstError true
.
The problem was when the users had not asked for that, tried to run n
benchmarks, all of them failed to build, and BDN was printing the same build error n
times.
In #1672 @adamsitnik has changed that, so when all the build fails, BDN stops after printing the first error.
Moreover, we have also changed the default behavior for the failed builds of the boilerplate code. If the build fails, we don't remove the files. Previously we have required the users to pass --keepFiles
to keep them. See #1567 for more details and don't forget about the Troubleshooting docs!
Docs and Samples improvements
Big thanks to @lukasz-pyrzyk, @fleckert, @MarecekF, @joostas, @michalgalecki, @WojciechNagorski, @MendelMonteiro, @kevinsalimi, @cedric-cf, @YohDeadfall, @jeffhandley and @JohannesDeml who have improved our docs and samples!
#1463, #1465, #1508, #1518, #1554, #1568, #1601, #1633, #1645, #1647, #1657, #1675, #1676, #1690.
Template improvements
- Projects created out of our official templates might have been unexpectedly packed when running
dotnet pack
on the entire solution. In #1584 @kendaleiv has explicitly disabled packing for the template. - The template had
netcoreapp3.0
TFM hardcoded. This got fixed by @https://github.com/ExceptionCaught in #1630 and #1632. - In #1667 @YohDeadfall has changed the default debug type from
portable
topdbonly
(required byDisassemblyDiagnoser
).
Bug fixes
- Very long string
[Arguments]
and[Params]
were causing BenchmarkDotNet to crash. Fixed by @adamsitnik in #1248 and #1545. So far trace file names were containing full benchmark names and arguments. Now if the name is too long, the trace file name is a hash (consistent for multiple runs of the same benchmark). The same goes for passing benchmark name by the host process to the benchmark process via command-line arguments. LangVersion
set to a non-numeric value likelatest
was crashing the build. Fixed by @martincostello in #1420.- Windows 10 November 2019 was being recognized as 2018. Fixed by @kapsiR in #1437.
- Assemblies loaded via streams were not supported. Fixed by @jeremyosterhoudt in #1443.
- NativeMemoryProfiler was detecting small leaks that were false positives. Fixed by @WojciechNagorski in #1451 and #1600.
- DisassemblyDiagnoser was crashing on Linux. Fixed by @damageboy in #1459.
- Target framework moniker was being printed as toolchain name for Full .NET Framework benchmarks. Fixed by @svick in #1471.
[ParamsSource]
returningIEnumerable<object[]>
was not working properly when combined with[Arguments]
. Fixed by @adamsitnik in #1478.NullReferenceException
inMultimodalDistributionAnalyzer
. Fixed by @suslovk in #1488.NotSupportedException
was being thrown if there was an encoding mismatch between host and benchmark process. Diagnosed by @ChristophLindemann in #1487, fixed by @lovettchris in #1491.MissingMethodException
was being thrown in projects that referenced a newer version of Iced. Fixed by @Symbai in #1497 and in #1502.AppendTargetFrameworkToOutputPath
set tofalse
was not supported. Fixed by @adamsitnik in #1563- A locking finalizer could have hanged benchmark process which would just print
// AfterAll
and never quit. Fixed by @adamsitnik in #1571. To prevent other hangs from happening, a timeout of250ms
was added. If the process does not quit after running the benchmarks and waiting250ms
, it's being force killed. - In some cases,
JsonExporter
was reportingNaN
for some of the Statistics. This was breaking non-.NET JSON deserializers. Fixed by @marcnet80 in #1581. UnitType.Size
metrics were not using the provided number format. Fixed by @jodydonetti in #1569 and #1618.MaxColumnWidth
setting was not used for type names. Fixed by @JohannesDeml in #1609.- Current culture was not respected when formatting
Ratio
column values. Fixed by @JohannesDeml in #1610. - BenchmarkDotNet was redirecting Standard Error of the benchmark process, which was causing deadlocks for benchmarks that were writing to it. Fixed by @adamstinik in #1631
DisassemblyDiagnoser
was failing to disassemble multiline source code. @YohDeadfall fixed that in #1674.- In #1644 @adamstinik has fixed the inconsistency between benchmark filter and hint.
Removal of the dotnet global tool
In #1006 (0.11.4) we have introduced a new dotnet global tool.
By looking at the number of reported bugs we got to the conclusion that the tool has not passed the test of time.
Why? Because it was based entirely on dynamic assembly loading which is very hard to get right in .NET and the fact that we support all existing .NET Runtimes (.NET, .NET Core, Mono, CoreRT) made it even harder (if not impossible).
We have removed it and the old versions are no longer supported. For more details, please refer to #1572.
Milestone details
In the v0.13.0 scope, 53 issues were resolved and 94 pull requests were merged. This release includes 111 commits by 37 contributors.
Resolved issues (53)
- #721 Add possibility to customize BaselinedScaledColumn with provided func (assignee: @AndreyAkinshin)
- #1136 benchmark / beforeEverything fails when running in docker-win
- #1242 bug JSON Exporter exports NaN for some properties. This fails most JSON parsers (assignee: @marcnet80)
- #1247 Support benchmarks with very long string arguments (assignee: @adamsitnik)
- #1288 Fix Hardware Counters diagnoser (assignee: @adamsitnik)
- #1290 BenchmarkRunner should support parsing console line arguments (assignee: @chan18)
- #1333 Getting "Unknown Processor" Again
- #1427 NativeMemoryProfiler reports false positive leak (assignee: @WojciechNagorski)
- #1431 System.IO.FileNotFoundException with EtwProfiler
- #1433 Benchmarks work in .NET 4.7.2 but not .NET Core 3.1
- #1436 Wrong OsBrandString for Windows 10 1909
- #1448 NRE in MultimodalDistributionAnalyzer
- #1452 Setting LangVersion to Latest Causes an Error
- #1464 DisassemblyDiagnoserConfig.ExportDiff needs better description
- #1472 Add support of Wasm to Benchmark Dotnet (assignee: @naricc)
- #1474 docs: Getting started guide
- #1480 BenchmarkRunner not working from VSTS agent (assignee: @lovettchris)
- #1487 Benchmarks do not execute (as service process / VSTS agent) on non US systems
- #1493 Using WithCustomBuildConfiguration leads to always running with RyuJIT Debug (assignee: @adamsitnik)
- #1495 [GcServer(true)] is ignored with --corerun
- #1496 System.MissingMethodException: Method not found: 'Iced.Intel.MasmFormatter.get_MasmOptions()'.
- #1512 Template has hardcoded netcoreapp3.0 TFM (assignee: @ExceptionCaught)
- #1532 Auto-generated project has invalid XML
- #1535 Can't benchmark library that targets 'net5.0-windows' framework (assignee: @adamsitnik)
- #1537 Failed to run benchmarks on .net 5 RC1 and Preview LangVersion
- #1539 Inconsistency between benchmark filter and hint (assignee: @adamsitnik)
- #1544 [EtwProfiler] Merge operation failed return code 0x3 (assignee: @adamsitnik)
- #1546 Sometimes Hardware Counters per Op are reported as NaNs (assignee: @adamsitnik)
- #1549 InstructionPointerExporter has been broken for a while (assignee: @adamsitnik)
- #1559 [Docs] Update Console Args doc (assignee: @kevinsalimi)
- #1561 NativeMemoryProfiler doesn't report allocations in v0.12.1.1432 Nightly (assignee: @WojciechNagorski)
- #1564 error MSB4086: A numeric comparison was attempted on "$(LangVersion)" (assignee: @adamsitnik)
- #1565 More consistent formatting of results
- #1566 BDN should not delete temporary build directories for failed builds (assignee: @adamsitnik)
- #1570 Benchmark runs failing when using .NET 5 RC2 SDK installed via snap (assignee: @adamsitnik)
- #1576 Missing/misleading version number with corerun
- #1585 Non-optimized dependency
- #1591 Wasm Benchmark Runs Failing with Target Framework Error (assignee: @naricc)
- #1598 VB Net Framework project throws exception from command line tool
- #1605 CoreRT / NativeAOT version (assignee: @adamsitnik)
- #1607 Exporter approval tests has recently become unstable (assignee: @marcnet80)
- #1613 EventPipeProfiler generating invalid SpeedScope files.
- #1616 BenchmarkDotNet fail in WPF project with .NET 5.0-windows target
- #1620 NullReferenceException in v0.12.1
- #1623 Can I run Full Framework benchmarks without having a Console App? (assignee: @adamsitnik)
- #1628 Installation uses legacy/archaic dotnetcore 2.1.503 (assignee: @adamsitnik)
- #1629 Writing to Console.Error in benchmarked code causes a deadlock (assignee: @adamsitnik)
- #1654 Update for 0.12.2
- #1670 dotnet benchmark cli tool errors with .net5.0 assemblies (assignee: @adamsitnik)
- #1673 Source code provider incorrectly handles multiline source code
- #1685 Support for SingleFile && SelfContained apps
- #1692 Bug running wasm benchmarks - Broken Pipe in writeline
- #1693 Estimate Date for Supporting .NET 6 (assignee: @adamsitnik)
Merged pull requests (94)
- #1097 Allow for Config per method, introduce OS and OSArchitecture filters (by @adamsitnik)
- #1248 Support very long string as benchmark arguments (by @adamsitnik)
- #1292 passed args to benchmark runner (by @chan18)
- #1360 Basic BenchmarkDotNet support for Xamarin (by @jonathanpeppers)
- #1420 Fix MSB4086 if LangVersion is a keyword (by @martincostello)
- #1426 Fix typo in log message (by @martincostello)
- #1429 [xamarin] fix Mono runtime version detection (by @jonathanpeppers)
- #1434 [samples] UI tweaks to Xamarin samples (by @jonathanpeppers)
- #1437 Fix wrongly reported os brand string for Windows 10 1909 (by @kapsiR)
- #1443 Handle assemblies loaded via a stream (by @jeremyosterhoudt)
- #1451 Fix native memory profiler (by @WojciechNagorski)
- #1454 always print full information about non-optimized dependencies (by @adamsitnik)
- #1458 Don't try to parse blank lines (by @TysonMN)
- #1459 Upgrades ClrMD to a version that will not crash on Linux :( (by @damageboy)
- #1463 Updated Disassembler docs (by @lukasz-pyrzyk)
- #1465 Improved doc description of the ExportDiff property (by @lukasz-pyrzyk)
- #1471 Clearly display names for .Net Framework (by @svick)
- #1478 ParamsSource returning IEnumerable<object[]> fixes (by @adamsitnik)
- #1479 net5.0 does not contain "core" word but it's a .NET Core moniker (by @adamsitnik)
- #1483 Add Wasm Tool Chain (by @naricc)
- #1488 Safe access to CultureInfo (by @suslovk)
- #1489 enforce Deterministic builds for auto-generated .NET Core projects (by @adamsitnik)
- #1490 be less strict about verifying the Acknowledgment (by @adamsitnik)
- #1491 set process output encoding to utf8 so BenchmarkRunnerDotNet works in self hosted VSTS agent. (by @lovettchris)
- #1492 allow the users to specify Platform via console args (by @adamsitnik)
- #1494 enforce Optimizations when using Custom Build Configurations (by @adamsitnik)
- #1497 Update to latest Iced 1.7.0 (by @Symbai)
- #1498 Pedantic WASM improvements (by @adamsitnik)
- #1500 Wasm: samples, docs and a bug fix (by @adamsitnik)
- #1501 Add Custom Runtime Pack option (by @naricc)
- #1502 Update to latest Iced (by @Symbai)
- #1503 Update MeasurementsStatistics.cs (by @skynode)
- #1507 Change mono-config.js format in the Wasm Tool Chain for ICU support (by @naricc)
- #1508 fixed typo (by @fleckert)
- #1509 [xamarin] fix for DebugConfig and read-only file system (by @jonathanpeppers)
- #1518 FactorialWithTailing - incorrect implementation (by @MarecekF)
- #1523 add .NET 6.0 support, rename .NET Core 5.0 to .NET 5.0 (by @adamsitnik)
- #1540 Remove unneeded files after etw profiler (by @WojciechNagorski)
- #1545 Fix Merge operation failed for EtwProfiler (by @adamsitnik)
- #1547 hardware counters: don't try to exclude non-existing overhead for long running benchmarks (by @adamsitnik)
- #1548 Remove the old PmcDiagnoser, EtwProfiler is much more accurate (by @adamsitnik)
- #1550 Bring instruction pointer exporter back to live (by @adamsitnik)
- #1552 Enable supported GcMode characteristics with corerun (by @stanciuadrian)
- #1554 Documentation: add --maxWidth description (by @joostas)
- #1556 Simplify code: remove sort before adding to HashSet (by @stanciuadrian)
- #1560 Add support for Platform-specific TFMs introduced in .NET 5 (by @adamsitnik)
- #1563 ensure that the auto-generated project alwas has tfm in the output path (by @adamsitnik)
- #1567 Dont remove artifacts when build fails (by @adamsitnik)
- #1568 Update getting-started.md (by @michalgalecki)
- #1569 Respect size number format in MetricColumn (by @jodydonetti)
- #1571 Dispose parameters, kill benchmarking process when it hangs after printing the results (by @adamsitnik)
- #1572 Remove the dotnet global tool (by @adamsitnik)
- #1573 Don't run the benchmark once per iteration if only the first ivocation lasts longer than IterationTime (by @adamsitnik)
- #1580 use Environment.Version to determine .NET 5+ versions (by @adamsitnik)
- #1581 Json exporter fix (by @marcnet80)
- #1582 introduce ManualConfig.CreateMinimumViable() method (by @adamsitnik)
- #1584 Prevent dotnet pack from packaging benchmark projects (by @kendaleiv)
- #1587 Memory Randomization (by @adamsitnik)
- #1590 Update message to not suggest an obsolete API (by @martincostello)
- #1592 Add wasmnet50 wasmnet60 monikers (by @naricc)
- #1600 fix issue #1561 (by @WojciechNagorski)
- #1601 Update README.md (by @WojciechNagorski)
- #1606 CoreRT feed and version update (by @adamsitnik)
- #1609 Fix #1604 - pass SummaryStyle to ParameterInstance.ToDisplayText() (by @JohannesDeml)
- #1610 Fix add missing culuture info to ToString in RatioStyle (by @JohannesDeml)
- #1612 Sorting parameter columns with parameter priority (by @JohannesDeml)
- #1618 Json indentation level fix (by @marcnet80)
- #1630 Update framework symbol on dotnet new template #1512 (by @ExceptionCaught)
- #1631 don't redirect Standard Error, as we don't read it and writing to it by benchmark can cause deadlocks (by @adamsitnik)
- #1632 update console app templating (by @ExceptionCaught)
- #1633 Update etwprofiler.md (by @MendelMonteiro)
- #1635 Install local SDK without sudo on Unix (by @am11)
- #1637 .NET Core 2.1 -> .NET 5.0 (by @adamsitnik)
- #1643 Remove CoreRT workaround (by @MichalStrehovsky)
- #1644 Filter hint improvements (by @adamsitnik)
- #1645 Update Console Args doc #1559 (by @kevinsalimi)
- #1647 Update API in documentation #1602 (by @kevinsalimi)
- #1652 Basic snap support (by @adamsitnik)
- #1657 1655 doc with options obsolete usage of with (by @cedric-cf)
- #1659 feat: Allowed to indicate the source of nuget package and whether it is a pre-release version. (by @workgroupengineering)
- #1662 Add tool chain for Netcore Mono AOT. (by @naricc)
- #1667 Changed default debug type to pdbonly (by @YohDeadfall)
- #1672 when all builds fail, BDN should stop after printing first error (by @adamsitnik)
- #1674 Fixed smart pointer for multiline source code (by @YohDeadfall)
- #1675 Updated disassembler contribution docs (by @YohDeadfall)
- #1676 Fix a docs typo (by @jeffhandley)
- #1679 Fix location for NativeAOT publish files (by @kant2002)
- #1686 Resolve assembly location for SingleFile (by @am11)
- #1689 Dont redirect standard input for WASM (by @naricc)
- #1690 Fix change runtime target to Core50 (by @JohannesDeml)
- #1691 don't remove OS version number from the platform-specifc TFM (by @adamsitnik)
- #1697 0.13.0 release notes (by @adamsitnik)
- #1698 Update "View results" from "Getting started" (by @rstm-sf)
- #1707 Set ValidateExecutableReferencesMatchSelfContained to false in aotllvm template (by @naricc)
Commits (111)
- 117c37 Postrelease update of v0.12.1 changelog (by @AndreyAkinshin)
- 742f44 Fix typo (by @AndreyAkinshin)
- 82b15e Fix MSB4086 if LangVersion is a keyword (#1420) (by @martincostello)
- 9c0f52 Xamarin Support (#1360) (by @jonathanpeppers)
- e37c02 Fix typo in log message (#1426) (by @martincostello)
- ccdf22 [xamarin] fix Mono runtime version detection (#1429) (by @jonathanpeppers)
- d95493 [samples] UI tweaks to Xamarin samples (#1434) (by @jonathanpeppers)
- d07604 Fix wrongly reported os brand string for Windows 10 1909 (#1437) (by @kapsiR)
- 1efd5e Handle assemblies loaded via a stream (#1443) (by @jeremyosterhoudt)
- 502ad7 Update OsBrandStringHelper.cs (by @AndreyAkinshin)
- 67971e Update OsBrandStringTests.cs (by @AndreyAkinshin)
- ceef31 don't try to parse blank lines #1456 (#1458) (by @TysonMN)
- 9a3469 Upgrades ClrMD to a version that will not crash on Linux :( (#1459) (by @damageboy)
- bd1c93 Updated Disassembler settings (#1463) (by @lukasz-pyrzyk)
- 35f50f Improved doc description of the ExportDiff property (#1465) (by @lukasz-pyrzyk)
- dbbab9 Clearly display names for .Net Framework (#1471) (by @svick)
- 044591 ParamsSource returning IEnumerable<object[]> fixes (#1478) (by @adamsitnik)
- 703d54 Safe access to CultureInfo (by @suslovk)
- a4dd37 Update to latest Iced (#1497) (by @Symbai)
- 092889 Add Wasm Tool Chain (#1483) (by @naricc)
- 01455d set process output encoding to utf8 (#1491) (by @lovettchris)
- fa7da4 net5.0 does not contain "core" word but it's a .NET Core moniker (#1479) (by @adamsitnik)
- 254da4 enforce Optimizations when using Custom Build Configurations (#1494) (by @adamsitnik)
- 765d52 allow the users to specify Platform via console args (#1492) (by @adamsitnik)
- 908b09 always print full information about non-optimized dependencies (#1454) (by @adamsitnik)
- 1ff50a Pedantic WASM improvements (#1498) (by @adamsitnik)
- d57c4c enforce Deterministic builds for auto-generated .NET Core projects (#1489) (by @adamsitnik)
- 59080c Support very long string as benchmark arguments (#1248) (by @adamsitnik)
- 9c5663 Wasm: samples, docs and a bug fix (#1500) (by @adamsitnik)
- 13ee8b Add Custom Runtime Pack option to WasmToolchain (#1501) (by @naricc)
- b356ac Update to latest Iced (#1502) (by @Symbai)
- 797ced fixed typo (#1508) (by @fleckert)
- ef0ac7 Change mono-config.js format in the Wasm Tool Chain for ICU support (#1507) (by @naricc)
- eb20d3 Update README (by @AndreyAkinshin)
- 92474e make MeasurementsStatistics a readonly ref struct (#1503) (by @skynode)
- 64cc94 [xamarin] fix for DebugConfig and read-only file system (#1509) (by @jonathanpeppers)
- c8af03 FactorialWithTailing - fix incorrect sample implementation (#1518) (by @MarecekF)
- c9f158 add .NET 6.0 support, rename .NET Core 5.0 to .NET 5.0 (#1523) (by @adamsitnik)
- e4d37d Fix native memory profiler (#1451) (by @WojciechNagorski)
- 10abc4 Remove unneeded files after etw profiler (#1540) (by @WojciechNagorski)
- e8d085 Documentation: add --maxWidth description (#1554) (by @joostas)
- c6cd54 Update CorrectionsSuggester.cs (#1556) (by @stanciuadrian)
- be769f Enable supported GcMode characteristics with corerun (#1552) (by @stanciuadrian)
- 0a004a Update getting-started.md (#1568) (by @michalgalecki)
- cd0bda Respect size number format in MetricColumn (#1569), fixes #1565 (by @jodydonetti)
- 349e90 Introduce RatioStyle, fix #721 (by @AndreyAkinshin)
- 718031 hardware counters: don't try to exclude non-existing overhead for long runnin... (by @adamsitnik)
- fbd52c remove the old PmcDiagnoser, EtwProfiler is much more accurate (#1548) (by @adamsitnik)
- 152414 Bring instruction pointer exporter back to live (#1550) (by @adamsitnik)
- c6d6fb Fix Merge operation failed for EtwProfiler (#1545) (by @adamsitnik)
- 769090 Add support for Platform-specific TFMs introduced in .NET 5 (#1560) (by @adamsitnik)
- 8de321 ensure that the auto-generated project alwas has target framework moniker in ... (by @adamsitnik)
- 0f9bb3 Dont remove artifacts when build fails (#1567) (by @adamsitnik)
- b4bda1 Dispose parameters, kill benchmarking process when it hangs after printing th... (by @adamsitnik)
- c209b1 Remove the dotnet global tool (#1572) (by @adamsitnik)
- 178b6a Don't run the benchmark once per iteration if only the first ivocation lasts ... (by @adamsitnik)
- 8b2214 use Environment.Version to determine .NET 5+ versions (#1580) (by @adamsitnik)
- d5c158 Prevent dotnet pack from packaging benchmark projects (#1584) (by @kendaleiv)
- 8149c3 Json exporter fix for double.NaN (#1581), fixes #1242 (by @marcnet80)
- c63fe8 Update message to not suggest an obsolete API (#1590) (by @martincostello)
- 0de41c Added wasmnet50 wasmnet60 monikers. (#1592) (by @naricc)
- 992719 fix issue #1561 (#1600) (by @WojciechNagorski)
- 81c234 Update README.md (#1601) (by @WojciechNagorski)
- 641ffd Fix #1604 - pass SummaryStyle to ParameterInstance.ToDisplayText() (#1609) (by @JohannesDeml)
- e72ddf Fix add missing culuture info to ToString in RatioStyle (#1610) (by @JohannesDeml)
- d17926 Json indentation level fix (#1618) (by @marcnet80)
- 40f6e5 Update framework symbol on dotnet new template #1512 (#1630) (by @ExceptionCaught)
- ffc8dd use .AddDiagnoser instead of the obsolete .With in the EtwProfiler doc sample... (by @MendelMonteiro)
- 5d421c Install local SDK without sudo on Unix (#1635) (by @am11)
- d71a7e update console app templating (#1632) (by @ExceptionCaught)
- aef9cb Sorting parameter columns with parameter priority (#1612) (by @JohannesDeml)
- d5f7b9 Memory Randomization (#1587) (by @adamsitnik)
- 5b2167 don't redirect Standard Error, as we don't read it and writing to it by bench... (by @adamsitnik)
- a7af81 introduce ManualConfig.CreateMinimumViable() method (#1582) (by @adamsitnik)
- 852bb8 .NET Core 2.1 -> .NET 5.0 (#1637) (by @adamsitnik)
- e01312 Support latest Windows and macOS versions in OsBrandStringHelper (by @AndreyAkinshin)
- 502dc9 CoreRT feed and version update (#1606) (by @adamsitnik)
- 9f5d70 Remove CoreRT workaround (#1643) (by @MichalStrehovsky)
- 6a151f passed args to benchmark runner (#1292) (by @chan18)
- bf63b3 Update Console Args doc, fixes #1559 (#1645) (by @kevinsalimi)
- 970d28 Update API in documentation, fixes #1602 (#1647) (by @kevinsalimi)
- d758f6 Allow for Config per method, introduce OS and OSArchitecture filters (#1097) (by @adamsitnik)
- b4e2b6 1655 doc with options obsolete usage of with (#1657) (by @cedric-cf)
- 8c28c8 add basic snap support (#1652) (by @adamsitnik)
- e1c8cb Filter hint improvements (#1644) (by @adamsitnik)
- 349f9d feat: Allowed to indicate the source of nuget package and whether it is a pre... (by @workgroupengineering)
- 4a917d Add tool chain for Netcore Mono AOT. (#1662) (by @naricc)
- 314a27 [Templates] Changed default debug type to pdbonly (#1667) (by @YohDeadfall)
- 2616cd Updated disassembler contribution docs (#1675) (by @YohDeadfall)
- 02b907 Fix a typo (#1676) (by @jeffhandley)
- b67cfb Fix location for NativeAOT publish files (#1679) (by @kant2002)
- 63e28c when all builds fail, BDN should stop after printing first error (#1672) (by @adamsitnik)
- becc13 Dont redirect standard input for WASM (#1689) (by @naricc)
- b97bf6 Fix change runtime target to Core50 (#1690) (by @JohannesDeml)
- 0321a3 Fixed smart pointer for multiline source code (#1674) (by @YohDeadfall)
- 7265c1 Resolve assembly location for SingleFile (#1686) (by @am11)
- 626dcb don't remove OS version number from the platform-specifc TFM (#1691) (by @adamsitnik)
- 95608d 0.13.0 release notes (#1697) (by @adamsitnik)
- 4b5a65 Remove Allocated column from the "View results" doc page (#1698) (by @rstm-sf)
- b0683f Set ValidateExecutableReferencesMatchSelfContained to false in aotllvm templa... (by @naricc)
- 09afe7 Windows 21H1 support in OsBrandStringHelper (by @AndreyAkinshin)
- 77b58d Update old changelogs (by @AndreyAkinshin)
- 2f4b79 Improve AsyncBenchmarksTests.TaskReturningMethodsAreAwaited (by @AndreyAkinshin)
- a79339 Disable CoreRtToolchain.Core50 in ThreadingDiagnoserTests.GetToolchains on Unix (by @AndreyAkinshin)
- 18e292 Update README (by @AndreyAkinshin)
- 09a204 Update BenchmarkDotNet.sln.DotSettings (by @AndreyAkinshin)
- 85db95 Bump Cake version: 0.37.0->1.1.0 (by @AndreyAkinshin)
- 5c74d5 Bump docfx version: 2.51->2.57.2 (by @AndreyAkinshin)
- 2a2c0c Update copyright year (2021) (by @AndreyAkinshin)
- 396060 Prepare v0.13.0 changelog (by @AndreyAkinshin)
- 6dcf43 Set library version: 0.13.0 (by @AndreyAkinshin)
Contributors (37)
- Adam Sitnik (@adamsitnik)
- Adeel Mujahid (@am11)
- Adrian Stanciu (@stanciuadrian)
- Andrey Akinshin (@AndreyAkinshin)
- Andrii Kurdiumov (@kant2002)
- Cédric Charière Fiedler (@cedric-cf)
- chan18 (@chan18)
- Chris Lovett (@lovettchris)
- damageboy (@damageboy)
- Dexter (@skynode)
- Florian Eckert (@fleckert)
- Jeff Handley (@jeffhandley)
- jeremyosterhoudt (@jeremyosterhoudt)
- Jody Donetti (@jodydonetti)
- Johannes Deml (@JohannesDeml)
- Jonathan Peppers (@jonathanpeppers)
- Jonathon Wei (@ExceptionCaught)
- Justas (@joostas)
- kapsiR (@kapsiR)
- Kaywan Salimi (@kevinsalimi)
- Ken Dale (@kendaleiv)
- Konstantin (@suslovk)
- Łukasz Pyrzyk (@lukasz-pyrzyk)
- marcnet80 (@marcnet80)
- MarecekF (@MarecekF)
- Martin Costello (@martincostello)
- Mendel Monteiro-Beckerman (@MendelMonteiro)
- Michał Gałecki (@michalgalecki)
- Michal Strehovský (@MichalStrehovsky)
- Nathan Ricci (@naricc)
- Petr Onderka (@svick)
- Rustam (@rstm-sf)
- Symbai (@Symbai)
- Tyson Williams (@TysonMN)
- Wojciech Nagórski (@WojciechNagorski)
- workgroupengineering (@workgroupengineering)
- Yoh Deadfall (@YohDeadfall)
Thank you very much!
Additional details
Date: May 19, 2021
Milestone: v0.13.0 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.13.0
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.13.0
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.13.0
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.13.0
BenchmarkDotNet v0.12.1
Highlights
- .NET 5 support
As you probably know, .NET Core 5 was officially rebranded to .NET 5. The new version of BenchmarkDotNet supports the new runtime after rebranding.
#1399 465ebf - Perfolizer adoption
The internal statistical engine of BenchmarkDotNet became mature enough to be transformed into an independent project. Meet perfolizer — a toolkit for performance analysis! While BenchmarkDotNet focuses on obtaining reliable measurements, perfolizer focuses on the decent analysis of measured data. You still can use all the statistical algorithms from BenchmarkDotNet, but you can also install perfolizer as a standalone NuGet package. You can find more details in the official announcement.
#1386 54a061 - Cross-platform disassembler
Now theDisassemblyDiagnoser
is cross-platform! The disassembling logic was also improved, now it handles runtime helper methods and references to method tables properly. Internally, it uses the Iced library for formatting assembly code.
Special thanks to @adamsitnik for the implementation and @0xd4d for Iced!
#1332 #899 #1316 #1364 294320 - EventPipe-based cross-platform profiler
Now you can easily profiler your benchmarks on Windows, Linux, and macOS! Just mark your class with the[EventPipeProfiler(...)]
attribute and get a.speedscope.json
file that you can browse in SpeedScope.
Special thanks to @WojciechNagorski for the implementation!
#1321 #1315 c648ff - New fluent API
We continue to improve our API and make it easier for reading and writing.
Special thanks to @WojciechNagorski for the implementation!
#1273 #1234 640d88 - Ref readonly support
Now you can useref readonly
in benchmark signatures.
Special thanks to @adamsitnik for the implementation!
#1389 #1388 9ac777
Cross-platform disassembler
Just mark your benchmark class with the [DisassemblyDiagnoser]
attribute
and you will get the disassembly listings for all the benchmarks.
The formatting looks pretty nice thanks to Iced.
It works like a charm on Windows, Linux, and macOS.
[DisassemblyDiagnoser]
public class IntroDisassembly
{
private int[] field = Enumerable.Range(0, 100).ToArray();
[Benchmark]
public int SumLocal()
{
var local = field; // we use local variable that points to the field
int sum = 0;
for (int i = 0; i < local.Length; i++)
sum += local[i];
return sum;
}
[Benchmark]
public int SumField()
{
int sum = 0;
for (int i = 0; i < field.Length; i++)
sum += field[i];
return sum;
}
}
.NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), X64 RyuJIT
; BenchmarkDotNet.Samples.IntroDisassembly.SumLocal()
mov rax,[rcx+8]
xor edx,edx
xor ecx,ecx
mov r8d,[rax+8]
test r8d,r8d
jle short M00_L01
M00_L00:
movsxd r9,ecx
add edx,[rax+r9*4+10]
inc ecx
cmp r8d,ecx
jg short M00_L00
M00_L01:
mov eax,edx
ret
; Total bytes of code 35
.NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), X64 RyuJIT
; BenchmarkDotNet.Samples.IntroDisassembly.SumField()
sub rsp,28
xor eax,eax
xor edx,edx
mov rcx,[rcx+8]
cmp dword ptr [rcx+8],0
jle short M00_L01
M00_L00:
mov r8,rcx
cmp edx,[r8+8]
jae short M00_L02
movsxd r9,edx
add eax,[r8+r9*4+10]
inc edx
cmp [rcx+8],edx
jg short M00_L00
M00_L01:
add rsp,28
ret
M00_L02:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 53
Now we handle runtime helper methods and references to method tables properly. Example:
Before:
; MicroBenchmarks.WithCallsAfter.Benchmark(Int32)
push rsi
sub rsp,20h
mov rsi,rcx
cmp edx,7FFFFFFFh
jne M00_L00
call MicroBenchmarks.WithCallsAfter.Static()
mov rcx,rsi
call MicroBenchmarks.WithCallsAfter.Instance()
mov rcx,rsi
call MicroBenchmarks.WithCallsAfter.Recursive()
mov rcx,rsi
mov rax,qword ptr [rsi]
mov rax,qword ptr [rax+40h]
call qword ptr [rax+20h]
mov rcx,rsi
mov edx,1
mov rax,7FF8F4217050h
add rsp,20h
pop rsi
jmp rax
M00_L00:
mov rcx,offset System_Private_CoreLib+0xa31d48
call coreclr!MetaDataGetDispenser+0x322a0
mov rsi,rax
mov ecx,0ACFAh
mov rdx,7FF8F42F4680h
call coreclr!MetaDataGetDispenser+0x17140
mov rdx,rax
mov rcx,rsi
call System.InvalidOperationException..ctor(System.String)
mov rcx,rsi
call coreclr!coreclr_shutdown_2+0x39f0
int 3
add byte ptr [rax],al
sbb dword ptr [00007ff9`26284e30],eax
add dword ptr [rax+40h],esp
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax],al
add byte ptr [rax-70BC4CCh],ah
; Total bytes of code 157
After:
; BenchmarkDotNet.Samples.WithCallsAfter.Benchmark(Int32)
push rsi
sub rsp,20
mov rsi,rcx
cmp edx,7FFFFFFF
jne M00_L00
call BenchmarkDotNet.Samples.WithCallsAfter.Static()
mov rcx,rsi
call BenchmarkDotNet.Samples.WithCallsAfter.Instance()
mov rcx,rsi
call BenchmarkDotNet.Samples.WithCallsAfter.Recursive()
mov rcx,rsi
mov rax,[rsi]
mov rax,[rax+40]
call qword ptr [rax+20]
mov rcx,rsi
mov edx,1
mov rax BenchmarkDotNet.Samples.WithCallsAfter.Benchmark(Boolean)
add rsp,20
pop rsi
jmp rax
M00_L00:
mov rcx MT_System.InvalidOperationException
call CORINFO_HELP_NEWSFAST
mov rsi,rax
mov ecx,12D
mov rdx,7FF954FF83F0
call CORINFO_HELP_STRCNS
mov rdx,rax
mov rcx,rsi
call System.InvalidOperationException..ctor(System.String)
mov rcx,rsi
call CORINFO_HELP_THROW
int 3
; Total bytes of code 134
See also: Cross-runtime .NET disassembly with BenchmarkDotNet.
Special thanks to @adamsitnik for the implementation and @0xd4d for Iced!
EventPipe-based cross-platform profiler
Now you can easily profiler your benchmarks on Windows, Linux, and macOS!
If you want to use the new profiler, you should just mark your benchmark class with the [EventPipeProfiler(...)]
attribute:
[EventPipeProfiler(EventPipeProfile.CpuSampling)] // <-- Enables new profiler
public class IntroEventPipeProfiler
{
[Benchmark]
public void Sleep() => Thread.Sleep(2000);
}
Once the benchmark run is finished, you get a .speedscope.json
file that can be opened in SpeedScope:
The new profiler supports several modes:
CpuSampling
- Useful for tracking CPU usage and general .NET runtime information. This is the default option.GcVerbose
- Tracks GC collections and samples object allocations.GcCollect
- Tracks GC collections only at very low overhead.Jit
- Logging when Just in time (JIT) compilation occurs. Logging of the internal workings of the Just In Time compiler. This is fairly verbose. It details decisions about interesting optimization (like inlining and tail call)
Please see Wojciech Nagórski's blog post for all the details.
Special thanks to @WojciechNagorski for the implementation!
New fluent API
We continue to improve our API and make it easier for reading and writing. The old API is still existing, but it is marked as obsolete and will be removed in the further library versions. The most significant changes:
Changes in Job configuration
Changes in IConfig/ManualConfig
Full fluent API
Special thanks to @WojciechNagorski for the implementation!
Ref readonly support
Now you can use ref readonly
in benchmark signatures.
Here is an example:
public class RefReadonlyBenchmark
{
static readonly int[] array = { 1 };
[Benchmark]
public ref readonly int RefReadonly() => ref RefReadonlyMethod();
static ref readonly int RefReadonlyMethod() => ref array[0];
}
Special thanks to @adamsitnik for the implementation!
Milestone details
In the v0.12.1 scope, 31 issues were resolved and 42 pull requests were merged. This release includes 85 commits by 19 contributors.
Resolved issues (31)
- #641 RPlotExporter hanging (assignee: @m-mccormick)
- #899 Tiered compilation and disassembler (assignee: @adamsitnik)
- #1023 Out of process benchmarks fail with ASP.NET Core SDK reference
- #1211 Binding Redirect Issues When Using Xml Serializers
- #1234 Strong type fluent API proposal (assignee: @WojciechNagorski)
- #1238 RunAllJoined Causing Exception (assignee: @gsomix)
- #1262 Params attribute doesn`t work in F# if you specify more than one enum value in constructor (assignee: @gsomix)
- #1295 Custom format/culture for report output values (for CSV, and maybe HTML, MD)
- #1305 Copy UserSecrets from benchmark project
- #1311 Spelling nit (assignee: @AndreyAkinshin)
- #1312 Add an option to pass environment variables to the default job
- #1315 Implement cross platform EventPipeProfiler diagnoser (assignee: @WojciechNagorski)
- #1316 Implement Unix Disassembler for .NET Core (assignee: @adamsitnik)
- #1318 use of NugetReference[] causes System.MissingMethodException: No parameterless constructor defined for this object. (assignee: @adamsitnik)
- #1323 DisassemblyDiagnoser index outside array bounds (assignee: @AndreyAkinshin)
- #1325 Surface native code size benchmarked code (assignee: @adamsitnik)
- #1326 BDN does not build using dotnet sdk from the command line in Linux
- #1339 Generated code and StyleCop.Analyzers (assignee: @adamsitnik)
- #1348 Different display text for arrays depending on a value source (assignee: @YohDeadfall)
- #1350 Warn the user if command line arguments were not passed to the BenchmarkSwitcher
- #1353 Show Length when param type is an array
- #1361 SimpleJobAttribute with RunStrategy and RuntimeMoniker
- #1363 Wrong assembly binding redirects for Microsoft.Data.SqlClient.resources ; using in Netcore3.0 project (assignee: @adamsitnik)
- #1364 Bug: Benchmark class with Console.WriteLine(1) fails for DisassemblyDiagnoser with 'Sequence contains no matching element' (assignee: @adamsitnik)
- #1369 Parameter column doesn't seem to respect culture info (assignee: @Tyrrrz)
- #1379 Unix CI builds are red (assignee: @AndreyAkinshin)
- #1385 Make BaselineCustomColumn.GetValue public
- #1388 'ref readonly' return is not supported (assignee: @adamsitnik)
- #1396 MacOS Azure Pipeline build is broken (assignee: @AndreyAkinshin)
- #1413 Plot with only one "default" Job (assignee: @AndreyAkinshin)
- #1416 EventPipeProfiler Documentation (assignee: @WojciechNagorski)
Merged pull requests (42)
- #1258 Task add style cope and fxcop analyzers (by @WojciechNagorski)
- #1263 Configuration compatibility validation (by @gsomix)
- #1266 Add EnumParam preserving type information (by @gsomix)
- #1273 New fluent API (by @WojciechNagorski)
- #1287 EdPeltChangePointDetector improvements (by @jeanbern)
- #1300 Update link of " official benchmarking guide" to use the new recommended link (by @eriawan)
- #1301 Improve BenchmarkDotNet.Templates (by @AndreyAkinshin)
- #1302 CultureInfo Refactoring (by @AndreyAkinshin)
- #1307 Fix project file order (by @vilinski)
- #1309 Copy UserSecrets from benchmark project (by @kant2002)
- #1313 add possibility to specify env vars via console line arguments (by @adamsitnik)
- #1321 The EventPipeProfiler cross-platform profiler (by @WojciechNagorski)
- #1327 Add package-refs to reference assemblies for linux build (by @damageboy)
- #1329 Show information about docker (by @WojciechNagorski)
- #1331 Use 24-hour time in joined summary file name (by @jroessel)
- #1332 Improved and Cross platform disassembler (by @adamsitnik)
- #1335 Attribute improvements (by @WojciechNagorski)
- #1340 Improvement of csproj finding (by @WojciechNagorski)
- #1349 Fixed display text for array parameters and arguments (by @YohDeadfall)
- #1357 add the
header at the top of the generated file to avoid static analysis tools from analyzing it, (by @adamsitnik) - #1359 Warn if command line arguments were not passed to the BenchmarkSwitcher (by @suslovk)
- #1365 Use DirtyAssemblyResolveHelper only for Full .NET Framework (by @adamsitnik)
- #1366 add missing SimpleJobAttribute ctor (by @adamsitnik)
- #1367 Await non-generic ValueTask returning method (by @mayuki)
- #1372 Use CultureInfo when formatting parameter values (by @Tyrrrz)
- #1373 fixes #641 (by @m-mccormick)
- #1375 don't require the JitDiagnosers (TailCall & Inlining) to run benchmarks once again just to gather JIT info, the overhead is very small (by @adamsitnik)
- #1376 update TraceEvent to 2.0.49 to get TailCalls working again (by @adamsitnik)
- #1380 Bump Cake version from 0.30.0 to 0.37.0, fix #1379 (by @AndreyAkinshin)
- #1381 Minor event pipe profiler improvements (by @adamsitnik)
- #1384 Fix build after styleCop (by @WojciechNagorski)
- #1386 Switch to perfolizer (by @AndreyAkinshin)
- #1387 Make BaselineCustomColumn expose "GetValue" as a public API (by @damageboy)
- #1389 Ref readonly support (by @adamsitnik)
- #1394 Align homepage example with README (by @dahlbyk)
- #1397 Bump macOS Azure Pipeline vmImage to 10.14, fix #1396 (by @AndreyAkinshin)
- #1399 React to .NET 5 branding changes (by @jkotas)
- #1407 Improve warnings for small operations number (by @CodeFuller)
- #1410 Updating Document - Fixing a small grammar mistake (by @abhinavgalodha)
- #1417 Fix --profiler option description. (by @WojciechNagorski)
- #1418 EventPipeProfiler documentation (by @WojciechNagorski)
- #1419 Small fix in EventPipeProfiler documentation (by @WojciechNagorski)
Commits (85)
- 396d4b #1262: Add EnumParam preserving type information (by @gsomix)
- 718b77 #1262: Add tests (by @gsomix)
- 33ec90 EdPeltChangePointDetector improvements (by @jeanbern)
- 7e3efc Postrelease update of v0.12.0 changelog (by @AndreyAkinshin)
- 8677b0 Update css in documentation (by @AndreyAkinshin)
- 919b7f Fix link to IntroThreadingDiagnoser in diagnoser.md (by @AndreyAkinshin)
- 4d15ea Update README.md (by @AndreyAkinshin)
- f2d081 Update link of " official benchmarking guide" to use the new recommended link... (by @eriawan)
- 05df0e Documentation: update article about command-line tool (by @AndreyAkinshin)
- d69505 Improve BenchmarkDotNet.Templates (#1301) (by @AndreyAkinshin)
- e23755 Speed up some integration tests (by @AndreyAkinshin)
- 3d96bf Update NuGet package descriptions (by @AndreyAkinshin)
- 351dae Update README.md (by @AndreyAkinshin)
- 5f07f4 Add Windows 10 brand string for 19H1 (by @AndreyAkinshin)
- fd92ff Update README.md (by @AndreyAkinshin)
- 5af5c5 Update README.md (by @AndreyAkinshin)
- 1b923f Fix project file order (#1307) (by @vilinski)
- 57b01f Copy UserSecrets from benchmark project (#1309) (by @kant2002)
- 2415fd Fix some typos, fix #1311 (by @AndreyAkinshin)
- e92d6d add possibility to specify env vars via console line arguments (#1313) (by @adamsitnik)
- b7054c WithNuGet should accept NuGetReferenceList, not IReadOnlyCollection<NuGetRefe... (by @adamsitnik)
- bb437b Remove curly braces for single statements (by @AndreyAkinshin)
- 76c675 Improve code readability (by @AndreyAkinshin)
- 8486e1 Merge pull request #1287 from jeanbern/patch-1 (by @AndreyAkinshin)
- d6bf40 Update README.md (by @AndreyAkinshin)
- 728c40 Support empty lines in disassembler/GetSmartPrefix, fix #1323 (by @AndreyAkinshin)
- 0c48c2 CultureInfo Refactoring (#1302) (by @AndreyAkinshin)
- 099550 Switch to using ms ref aseemblies for build (#1327) (by @damageboy)
- 55842b Merge pull request #1266 from gsomix/feature/1262-fsharp-enums (by @AndreyAkinshin)
- 35d358 Show information about docker (#1329) (by @WojciechNagorski)
- b6283c Use 24-hour time in joined summary file name (#1331) (by @jroessel)
- 640d88 New fluent API (#1273), fixes #1234 (by @WojciechNagorski)
- a3f76b Update README (by @AndreyAkinshin)
- 4a9697 Update copyright year (by @AndreyAkinshin)
- 5e7f01 add the
header at the top of the generated file to avoid s... (by @adamsitnik) - 07b512 Await non-generic ValueTask returning method (#1367) (by @mayuki)
- 479177 Display array length for array parameters and arguments (#1349), fixes #1348 ... (by @YohDeadfall)
- 3b8d2c Warn if command line arguments were not passed to the BenchmarkSwitcher (#135... (by @suslovk)
- 87d85a Use CultureInfo when formatting parameter values (#1372) (by @Tyrrrz)
- 310b5a add missing SimpleJobAttribute ctor, fixes #1361 (#1366) (by @adamsitnik)
- 6a1458 change the way RPlotExporter reads the R script output, fixes #641 (#1373) (by @m-mccormick)
- ff4c3d Attribute improvements (#1335) (by @WojciechNagorski)
- 29eafb Improvement of csproj finding (#1340) (by @WojciechNagorski)
- be2168 Use DirtyAssemblyResolveHelper only for Full .NET Framework (#1365) (by @adamsitnik)
- 664ab6 update TraceEvent to 2.0.49 to get TailCalls working again (#1376) (by @adamsitnik)
- b788bc don't require the JitDiagnosers (TailCall & Inlining) to run benchmarks once ... (by @adamsitnik)
- 8ad2a9 Bump Cake version from 0.30.0 to 0.37.0, fix #1379 (#1380) (by @AndreyAkinshin)
- 474047 Task add style cope and fxcop analyzers (#1258) (by @WojciechNagorski)
- c648ff The EventPipeProfiler cross-platform profiler (#1321) (by @WojciechNagorski)
- 19169a Add brand strings for latest Windows versions (by @AndreyAkinshin)
- 532f84 Update README (by @AndreyAkinshin)
- 3defd7 Minor event pipe profiler improvements (#1381) (by @adamsitnik)
- 294320 Improved and Cross platform disassembler (#1332) (by @adamsitnik)
- 1d63d6 Fix build after styleCop (#1384) (by @WojciechNagorski)
- b3ba08 Make BaselineCustomColumn expose "GetValue" as a public API (#1387) (by @damageboy)
- 54a061 Switch to perfolizer (by @AndreyAkinshin)
- 9ac777 Ref readonly support (#1389) (by @adamsitnik)
- c3286f Update CodeAnnotations.cs (by @AndreyAkinshin)
- 3223c9 Code cleanup (by @AndreyAkinshin)
- c19e54 Implement configurations compatibility validation (#1263), Closes #1238 (by @gsomix)
- df434e Align homepage example with README (#1394) (by @dahlbyk)
- 9a251a Bump macOS Azure Pipeline vmImage to 10.14, fix #1396 (#1397) (by @AndreyAkinshin)
- 465ebf React to .NET 5 branding changes (#1399) (by @jkotas)
- 6cca72 Updating a small grammar mistake (#1410) (by @abhinavgalodha)
- 27b32e Improve warnings for small operations number (#1407) (by @CodeFuller)
- 2d365b Fix --profiler option description. (#1417) (by @WojciechNagorski)
- 7902cd Add macOS Catalina support in OsBrandStringHelper (by @AndreyAkinshin)
- fd4c32 Update README (by @AndreyAkinshin)
- 6e13ba Resolving JobId in DefaultCharacteristicPresenter, fix #1413 (by @AndreyAkinshin)
- 35ebd2 Better job id generation in SimpleJobAttribute (by @AndreyAkinshin)
- bf4778 Use ASCII mode for Measurement presentation in terminal (by @AndreyAkinshin)
- f6b81f Display result path in RPlotExporter (by @AndreyAkinshin)
- 30b269 Disable plot printing in BuildPlots.R (by @AndreyAkinshin)
- 27887d Disable Rplots.pdf generation in BuildPlots.R (by @AndreyAkinshin)
- 338e40 Specify uid for how-to-run.md (by @AndreyAkinshin)
- f6dcd3 Add BenchmarkDotNet.Annotations in API documentation (by @AndreyAkinshin)
- b503fd Bump DocFX version from 2.46 to 2.51 (by @AndreyAkinshin)
- f457e7 Prepare v0.12.1 changelog (by @AndreyAkinshin)
- 53d090 Fix documentation.md (by @AndreyAkinshin)
- e72897 Add v0.12.1 highlights (by @AndreyAkinshin)
- 2de040 Bump perfolizer version from 0.2.0 to 0.2.1 (by @AndreyAkinshin)
- 76a070 EventPipeProfiler documentation (#1418) (by @WojciechNagorski)
- 928fb1 EventPipeProfiler doc improvements (#1419) (by @WojciechNagorski)
- 12798e Update documentation (by @AndreyAkinshin)
- 384d47 Set library version: 0.12.1 (by @AndreyAkinshin)
Contributors (19)
- Abhinav Galodha (@abhinavgalodha)
- Adam Sitnik (@adamsitnik)
- Andreas Vilinski (@vilinski)
- Andrey Akinshin (@AndreyAkinshin)
- Andrii Kurdiumov (@kant2002)
- CodeFuller (@CodeFuller)
- damageboy (@damageboy)
- Eriawan Kusumawardhono (@eriawan)
- Evgeniy Andreev (@gsomix)
- Jan Kotas (@jkotas)
- Jean-Bernard Pellerin (@jeanbern)
- Johannes Rössel [yWorks] (@jroessel)
- Keith Dahlby (@dahlbyk)
- Konstantin (@suslovk)
- Matt McCormick (@m-mccormick)
- Mayuki Sawatari (@mayuki)
- Oleksii Holub (@Tyrrrz)
- Wojciech Nagórski (@WojciechNagorski)
- Yoh Deadfall (@YohDeadfall)
Thank you very much!
Additional details
Date: April 6, 2020
Milestone: v0.12.1 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.12.1
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.12.1
- https://www.nuget.org/packages/BenchmarkDotNet.Tool/0.12.1
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.12.1
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.12.1
BenchmarkDotNet v0.12.0
It's been several months since our last release, but we have been working hard and have some new features for you!
Highlights
- Features and major improvements
- Advanced multiple target frameworks support
Now BenchmarkDotNet supports .NET Framework 4.8, .NET Core 3.1, and .NET Core 5.0. Also, we reworked our API that allows targeting several runtimes from the same config: the new API is more consistent, flexible, and powerful. For example, if you want to execute your benchmarking using .NET Framework 4.8 and .NET Core 3.1, you can use theSimpleJob(RuntimeMoniker.Net48)
,[SimpleJob(RuntimeMoniker.NetCoreApp31)]
attributes orJob.Default.With(ClrRuntime.Net48)
,Job.Default.With(CoreRuntime.Core31)
jobs in a manual config. You can find more details below. #1188, #1186, #1236 - Official templates for BenchmarkDotNet-based projects
With the help of the BenchmarkDotNet.Templates NuGet package, you can easily create new projects from the command line viadotnet new benchmark
. This command has a lot of useful options, so you can customize your new project as you want. #1044 - New NativeMemoryProfiler
NativeMemoryProfiler
measure the native memory traffic and adds the extra columnsAllocated native memory
andNative memory leak
to the summary table. Internally, it usesEtwProfiler
to profile the code using ETW. #457, #1131, #1208, #1214, #1218, #1219 - New ThreadingDiagnoser
ThreadingDiagnoser
also adds two extra columns to the summary table:Completed Work Items
(the number of work items that have been processed in ThreadPool per single operation) andLock Contentions
(the number of times there was contention upon trying to take a Monitor's lock per single operation). Internally, it uses new APIs exposed in .NET Core 3.0. #1154, #1227 - Improved MemoryDiagnoser
NowMemoryDiagnoser
includes memory allocated by all threads that were live during benchmark execution: a new GC API was exposed in .NET Core 3.0 preview6+. It allows to get the number of allocated bytes for all threads. #1155, #1153, #723 - LINQPad 6 support
Now both LINQPad 5 and LINQPad 6 are supported! #1241, #1245 - Fast documentation search
We continue to improve the usability of our documentation. In this release, we improved the search experience in the documentation: now it works almost instantly with the help of Algolia engine! #1148, #1158
- Advanced multiple target frameworks support
- Minor summary and exporter improvements
- Improved presentation of the current architecture in the environment information
In the previous version of BenchmarkDotNet, the reports always contained "64bit" or "32bit" which did not tell if it was ARM or not. Now it prints the full architecture name (x64
,x86
,ARM
, orARM64
). For example, instead of.NET Framework 4.8 (4.8.3815.0), 64bit RyuJIT
you will get.NET Framework 4.8 (4.8.3815.0), X64 RyuJIT
or.NET Framework 4.8 (4.8.3815.0), ARM64 RyuJIT
. #1213 - Simplified reports for Full .NET Framework version
Previous version:.NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3324.0
. Current version:.NET Framework 4.7.2 (4.7.3362.0), 64bit RyuJIT
. #1114, #1111 - More reliable CPU info on Windows
We added a workaround to for a bug in wmic that uses\r\r\n
as a line separator. #1144, #1145 - Better naming for generated plots
When[RPlotExporter]
is used, BenchmarkDotNet generates a lot of useful plots in theBenchmarkDotNet.Artifacts
folder. The naming of the plot files was improved: benchmarks withoutParams
doesn't include a double dash (--
) in their names anymore. 1183, 1212 - Better density plot precision
The previous version of BenchmarkDotNet used the rule-of-thumb bandwidth selector in
RPlotExporter
density plots. It was fine for unimodal distributions, but sometimes it produced misleading plots for multimodal distributions. Now, RPlotExporter uses the Sheather&Jones bandwidth selector that significantly improves the presentation of the density plots for complex distributions. 58fde64 - Better alignment in
HtmlExporter
Now BenchmarkDotNet aligns the content exported byHtmlExporter
to the right. #1189 dfa074 - Better precision calculation in SummaryTable
4e9eb43 - Better summary analysis
BenchmarkDotNet warns the user when benchmark baseline value is too close to zero and the columns derived from BaselineCustomColumn cannot be computed. #1161, #600 - Make log file datetime format 24-hour
#1149 - Improve AskUser prompt message
The error messages will surround*
by quotes on Linux and macOS. #1147
- Improved presentation of the current architecture in the environment information
- Minor API improvements
- ED-PELT algorithm for changepoint detection is now available
You can find details in this blog post. f89091 - Improved OutlierMode API
BenchmarkDotNet performs measurement postprocessing that may remove some of the outlier values (it can be useful to remove upper outliers that we get because of the natural CPU noise). In the previous version, naming for theOutlierMode
values was pretty confusing:None/OnlyUpper/OnlyLower/All
. Now, these values were renamed toDontRemove/RemoveUpper/RemoveLower/RemoveAll
. For example, if you want to remove all the outliers, you can annotate your benchmark with the[Outliers(OutlierMode.RemoveAll)]
attribute. The old names still exist (to make sure that the changes are backward compatible), but they are marked as obsolete, and they will be removed in the future versions of the library. #1199, 0e4b8e - Add the possibility to pass
Config
toBenchmarkSwitcher.RunAll
andRunAllJoined
#1194, ae23bd - Improved command line experience
When user uses--packages $path
, the$path
will be sent to the dotnet build command as well. 1187 - Extend the list of supported power plans. Now it supports "ultimate", "balanced", and "power saver" plans. #1132, #1139
- Make it possible to not enforce power plan on Windows. 1578c5c
Guid
support in benchmark arguments
Now you can useGuid
instances as benchmark arguments. 04ec20b- Make
ArgumentsSource
supportIEnumerable<object[]>
for benchmarks accepting a single argument to mimicMemberData
behaviour.
ec296dc - Make
FullNameProvider
public
So it can be reused by thedotnet/performance
repository. 6d71308 - Extend
Summary
withLogFilePath
#1135, 6e6559 - Allow namespace filtering for
InliningDiagnoser
#1106, #1130 - Option to configure
MaxParameterColumnWidth
#1269, 4ec888
- ED-PELT algorithm for changepoint detection is now available
- Other improvements
- Misc improvements in the documentation
#1175, #1173, #1180, #1203, #1204, #1206, #1209, #1219, #1225, #1279 - Copy
PreserveCompilationContext
MSBuild setting from the project that defines benchmarks
#1152, 063d1a - Add
System.Buffers.ArrayPoolEventSource
to the list of default .NET Providers ofEtwProfiler
#1179, a106b1 - Consume CoreRT from the new NuGet feed
Because CoreRT no longer publishes to MyGet. #1129
- Misc improvements in the documentation
- Breaking changes:
- The
[ClrJob]
,[CoreJob]
and[CoreRtJob]
attributes got obsoleted and replaced by a[SimpleJob]
which requires the user to provide target framework moniker in an explicit way. (See the "Advanced multiple target frameworks support" section for details.) #1188, #1182, #1115, #1056, #993, - The old
InProcessToolchain
is now obsolete. It's recommended to useInProcessEmitToolchain
. If you want to use the old one on purpose, you have to useInProcessNoEmitToolchain
. #1123
- The
- Bug fixes:
- Invalid arg passing in StreamLogger constructor. The
append
arg was not passed to theStreamWriter
.ctor. #1185 - Improve the output path of
.etl
files produced byEtwProfiler
.EtwProfiler
was throwing NRE for users who were using[ClrJob]
and[CoreJob]
attributes. #1156, #1072 - Flush custom loggers at the end of benchmark session. #1134
- Make ids for tag columns unique - when using multiple
TagColumns
only oneTagColumn
was printed in the results. #1146
- Invalid arg passing in StreamLogger constructor. The
Advanced multiple target frameworks support
Now BenchmarkDotNet supports .NET Framework 4.8, .NET Core 3.1, and .NET Core 5.0.
Also, we reworked our API that allows targeting several runtimes from the same config:
the new API is more consistent, flexible, and powerful.
For example, if you want to execute your benchmarking using .NET Framework 4.8 and .NET Core 3.1,
you can use the SimpleJob(RuntimeMoniker.Net48)
, [SimpleJob(RuntimeMoniker.NetCoreApp31)]
attributes or
Job.Default.With(ClrRuntime.Net48)
, Job.Default.With(CoreRuntime.Core31)
jobs in a manual config.
Now let's discuss how to use it in detail. If you want to test multiple frameworks, your project file MUST target all of them and you MUST install the corresponding SDKs:
<TargetFrameworks>netcoreapp3.0;netcoreapp2.1;net48</TargetFrameworks>
If you run your benchmarks without specifying any custom settings, BenchmarkDotNet is going to run the benchmarks using the same framework as the host process (it corresponds to RuntimeMoniker.HostProcess
):
dotnet run -c Release -f netcoreapp2.1 # is going to run the benchmarks using .NET Core 2.1
dotnet run -c Release -f netcoreapp3.0 # is going to run the benchmarks using .NET Core 3.0
dotnet run -c Release -f net48 # is going to run the benchmarks using .NET 4.8
mono $pathToExe # is going to run the benchmarks using Mono from your PATH
To run the benchmarks for multiple runtimes with a single command from the command line, you need to specify the runtime moniker names via --runtimes|-r
console argument:
dotnet run -c Release -f netcoreapp2.1 --runtimes netcoreapp2.1 netcoreapp3.0 # is going to run the benchmarks using .NET Core 2.1 and .NET Core 3.0
dotnet run -c Release -f netcoreapp2.1 --runtimes netcoreapp2.1 net48 # is going to run the benchmarks using .NET Core 2.1 and .NET 4.8
What is going to happen if you provide multiple Full .NET Framework monikers? Let's say:
dotnet run -c Release -f net461 net472 net48
Full .NET Framework always runs every .NET executable using the latest .NET Framework available on a given machine. If you try to run the benchmarks for a few .NET TFMs, they are all going to be executed using the latest .NET Framework from your machine. The only difference is that they are all going to have different features enabled depending on the target version they were compiled for. You can read more about this here and here. This is .NET Framework behavior which can not be controlled by BenchmarkDotNet or any other tool.
Note: Console arguments support works only if you pass the args
to BenchmarkSwitcher
:
class Program
{
static void Main(string[] args)
=> BenchmarkSwitcher
.FromAssembly(typeof(Program).Assembly)
.Run(args); // crucial to make it work
}
You can achieve the same thing using [SimpleJobAttribute]
:
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
namespace BenchmarkDotNet.Samples
{
[SimpleJob(RuntimeMoniker.Net48)]
[SimpleJob(RuntimeMoniker.Mono)]
[SimpleJob(RuntimeMoniker.NetCoreApp21)]
[SimpleJob(RuntimeMoniker.NetCoreApp30)]
public class TheClassWithBenchmarks
Or using a custom config:
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Environments;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;
namespace BenchmarkDotNet.Samples
{
class Program
{
static void Main(string[] args)
{
var config = DefaultConfig.Instance
.With(Job.Default.With(CoreRuntime.Core21))
.With(Job.Default.With(CoreRuntime.Core30))
.With(Job.Default.With(ClrRuntime.Net48))
.With(Job.Default.With(MonoRuntime.Default));
BenchmarkSwitcher
.FromAssembly(typeof(Program).Assembly)
.Run(args, config);
}
}
}
The recommended way of running the benchmarks for multiple runtimes is to use the --runtimes
console line argument.
By using the console line argument, you don't need to edit the source code anytime you want to change the list of runtimes.
Moreover, if you share the source code of the benchmark, other people can run it even if they don't have the exact same framework version installed.
Official templates for BenchmarkDotNet-based projects
Since v0.12.0, BenchmarkDotNet provides project templates to setup your benchmarks easily. The template exists for each major .NET language (C#, F# and VB) with equivalent features and structure. The templates require the .NET Core SDK. Once installed, run the following command to install the templates:
dotnet new -i BenchmarkDotNet.Templates
If you want to uninstall all BenchmarkDotNet templates:
dotnet new -u BenchmarkDotNet.Templates
The template is a NuGet package distributed over nuget.org: BenchmarkDotNet.Templates. To create a new C# benchmark library project from the template, run:
dotnet new benchmark
If you'd like to create F# or VB project, you can specify project language with -lang
option:
dotnet new benchmark -lang F#
dotnet new benchmark -lang VB
The template projects have five additional options - all of them are optional.
By default, a class library project targeting netstandard2.0 is created.
You can specify -f
or --frameworks
to change target to one or more frameworks:
dotnet new benchmark -f netstandard2.0;net472
The option --console-app
creates a console app project targeting netcoreapp3.0
with an entry point:
dotnet new benchmark --console-app
This lets you run the benchmarks from a console (dotnet run
) or from your favorite IDE.
The option -f
or --frameworks
will be ignored when --console-app
is set.
The option -b
or --benchmarkName
sets the name of the benchmark class:
dotnet new benchmark -b Md5VsSha256
BenchmarkDotNet lets you create a dedicated configuration class (see Configs) to customize the execution of your benchmarks.
To create a benchmark project with a configuration class, use the option -c
or --config
:
dotnet new benchmark -c
The option --no-restore
if specified, skips the automatic NuGet restore after the project is created:
dotnet new benchmark --no-restore
Use the -h
or --help
option to display all possible arguments with a description and the default values:
dotnet new benchmark --help
The version of the template NuGet package is synced with the BenchmarkDotNet package.
For instance, the template version 0.12.0
is referencing BenchmarkDotnet 0.12.0 - there is no floating version behavior.
For more info about the dotnet new
CLI, please read the documentation.
New NativeMemoryProfiler
NativeMemoryProfiler
measure the native memory traffic and adds the extra columns Allocated native memory
and Native memory leak
to the summary table.
Internally, it uses EtwProfiler
to profile the code using ETW.
Consider the following benchmark:
[ShortRunJob]
[NativeMemoryProfiler]
[MemoryDiagnoser]
public class IntroNativeMemory
{
[Benchmark]
public void BitmapWithLeaks()
{
var flag = new Bitmap(200, 100);
var graphics = Graphics.FromImage(flag);
var blackPen = new Pen(Color.Black, 3);
graphics.DrawLine(blackPen, 100, 100, 500, 100);
}
[Benchmark]
public void Bitmap()
{
using (var flag = new Bitmap(200, 100))
{
using (var graphics = Graphics.FromImage(flag))
{
using (var blackPen = new Pen(Color.Black, 3))
{
graphics.DrawLine(blackPen, 100, 100, 500, 100);
}
}
}
}
private const int Size = 20; // Greater value could cause System.OutOfMemoryException for test with memory leaks.
private int ArraySize = Size * Marshal.SizeOf(typeof(int));
[Benchmark]
public unsafe void AllocHGlobal()
{
IntPtr unmanagedHandle = Marshal.AllocHGlobal(ArraySize);
Span<byte> unmanaged = new Span<byte>(unmanagedHandle.ToPointer(), ArraySize);
Marshal.FreeHGlobal(unmanagedHandle);
}
[Benchmark]
public unsafe void AllocHGlobalWithLeaks()
{
IntPtr unmanagedHandle = Marshal.AllocHGlobal(ArraySize);
Span<byte> unmanaged = new Span<byte>(unmanagedHandle.ToPointer(), ArraySize);
}
}
It will produce the summary table like this one:
Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | Allocated native memory | Native memory leak |
---|---|---|---|---|---|---|---|---|---|
BitmapWithLeaks | 73,456.43 ns | 22,498.10 ns | 1,233.197 ns | - | - | - | 177 B | 13183 B | 11615 B |
Bitmap | 91,590.08 ns | 101,468.12 ns | 5,561.810 ns | - | - | - | 180 B | 12624 B | - |
AllocHGlobal | 79.91 ns | 43.93 ns | 2.408 ns | - | - | - | - | 80 B | - |
AllocHGlobalWithLeaks | 103.50 ns | 153.21 ns | 8.398 ns | - | - | - | - | 80 B | 80 B |
As you can see, we have two additional columns Allocated native memory
and Native memory leak
that contain some very useful numbers!
New ThreadingDiagnoser
ThreadingDiagnoser
also adds two extra columns to the summary table:
Completed Work Items
: The number of work items that have been processed in ThreadPool (per single operation)Lock Contentions
: The number of times there was contention upon trying to take a Monitor's lock (per single operation)
Internally, it uses new APIs exposed in .NET Core 3.0.
It can be activated with the help of the [ThreadingDiagnoser]
attribute:
[ThreadingDiagnoser]
public class IntroThreadingDiagnoser
{
[Benchmark]
public void CompleteOneWorkItem()
{
ManualResetEvent done = new ManualResetEvent(initialState: false);
ThreadPool.QueueUserWorkItem(m => (m as ManualResetEvent).Set(), done);
done.WaitOne();
}
}
The above example will print a summary table like this one:
Method | Mean | StdDev | Median | Completed Work Items | Lock Contentions |
---|---|---|---|---|---|
CompleteOneWorkItem | 8,073.5519 ns | 69.7261 ns | 8,111.6074 ns | 1.0000 | - |
LINQPad 6 support
Now both LINQPad 5 and LINQPad 6 are supported:
Fast documentation search
We continue to improve the usability of our documentation. In this release, we improved the search experience in the documentation: now it works almost instantly with the help of Algolia engine! That's how it looks:
Milestone details
In the v0.12.0 scope, 44 issues were resolved and 56 pull requests were merged. This release includes 110 commits by 25 contributors.
Resolved issues (44)
- #198 [Feature request] No logger for benchmark run? (assignee: @CodeTherapist)
- #311 How to debug benchmarks that fail with exception on file system access operations (assignee: @adamsitnik)
- #457 Track Native Memory Allocations and more informations with our ETW Memory Diagnoser
- #600 Scaling issue
- #723 MemoryDiagnoser should include memory allocated by all Threads that were live during benchmark execution (assignee: @adamsitnik)
- #995 Running benchmark fails when targeting netcoreapp2.2 (assignee: @adamsitnik)
- #1028 Add new template for "dotnet new benchmark" (assignee: @CodeTherapist)
- #1072 EtwProfiler exports trace file only for a single runtime when Runtimes are controlled via attributes (assignee: @adamsitnik)
- #1106 Allow user defined namespace filter for InliningDiagnoser
- #1111 Change the format of printed Full .NET Framework Version (assignee: @adamsitnik)
- #1115 Running using dotnet benchmark uses wrong core runtime
- #1132 The power management feature extension
- #1134 StreamLogger is not properly flushed on shutdown (assignee: @AndreyAkinshin)
- #1135 The default file logger and summary title are out of sync (assignee: @adamsitnik)
- #1137 [Discussion] Improve search experience in the documentation
- #1144 Incorrect CPU info for .NET Core applications
- #1146 Only the first of multiple custom columns is included in the summary table (assignee: @AndreyAkinshin)
- #1147 Update benchmark switcher instructions to work on Linux (assignee: @AndreyAkinshin)
- #1149 Ambiguous hour component in log file name timestamp (assignee: @AndreyAkinshin)
- #1152 Failed to test Roslyn. (assignee: @adamsitnik)
- #1153 Use GC.GetTotalAllocatedBytes when available in MemoryDiagnoser (assignee: @adamsitnik)
- #1154 Add a ConcurrencyDiagnoser? (assignee: @adamsitnik)
- #1156 Crash when BenchmarkDotNet.Diagnostics.Windows.Session.GetFilePath throws NRE (assignee: @adamsitnik)
- #1158 🔍 Improving search on docs with Algolia's DocSearch
- #1162 Incorrect value of BenchmarkDotNet.Toolchains.DotNetCli.NetCoreAppSettings.Default
- #1168 Consider using default value instead of hardcoded '-' in MetricColumn.GetValue()
- #1179 Add System.Buffers.ArrayPoolEventSource to the list of default .NET Providers of EtwProfiler (assignee: @adamsitnik)
- #1181 Log shows a wrong name for plot images
- #1182 Benchingmarking .NET 4.8 Causes Errors
- #1183 Plots of benchmarks without params have a double dash (--) in the name
- #1186 Add support for --runtimes net48 (assignee: @adamsitnik)
- #1187 When user uses --packages $path, the $path should be sent to dotnet build command as well (assignee: @adamsitnik)
- #1194 RunAll with ToolChains (assignee: @adamsitnik)
- #1195 LatestCoreRtVersionIsSupported fails on Mac Os
- #1202 BenchmarkDotNet Not Recognizing CPU
- #1220 [Docs] RScript / R_HOME setup
- #1235 NativeMemoryProfiler exception (assignee: @WojciechNagorski)
- #1236 Rework new API for target runtimes (assignee: @adamsitnik)
- #1241 Can BenchmarkDotNet be enabled for LINQPad 6? (assignee: @adamsitnik)
- #1269 Unable to show full param string in the report (assignee: @adamsitnik)
- #1280 Improvement in memory statistics (assignee: @WojciechNagorski)
- #1285 Issue with .Net Core version 3.0
- #1289 How to config to not save .log files?
- #1291 MemoryDiagnoser reports weird results for .NET Core 3.0
Merged pull requests (56)
- #1044 Add "dotnet new" benchmark project template (by @CodeTherapist)
- #1114 simplify the reported Full .NET Framework version, fixes 1111 (by @adamsitnik)
- #1123 + InProcessNoEmitToolchain (obsoletes the InProcessToolchain) (by @ig-sinicyn)
- #1129 Consume CoreRT from the new NuGet feed (by @MichalStrehovsky)
- #1130 allow namespace filtering for InliningDiagnoser (#1106) (by @MarekM25)
- #1131 NativeMemoryDiagnoser (by @WojciechNagorski)
- #1139 Power-Management extension (#1132) (by @MarekM25)
- #1145 Added workaround to fix incorrect CPU info when using wmic (by @YohDeadfall)
- #1148 Improve search experience in the documentation (by @s-pace)
- #1155 Use new .NET Core 3.0 API to get the total number of allocated bytes for all threads (by @adamsitnik)
- #1161 Warn the user when benchmark baseline value is too close to zero and the columns derived from BaselineCustomColumn cannot be computed (by @mhmd-azeez)
- #1163 Make netcoreapp2.1 default (by @adamsitnik)
- #1169 Fix: broken link in readme.md (by @Ant-hem)
- #1173 Updated index.md and fixed Relative performance url (by @sergey-litvinov)
- #1175 Added information about what a Gen X column means (by @jigargandhi)
- #1180 Update docstring for IterationSetup/IterationCleanup (by @billwert)
- #1185 Invalid arg passing in StreamLogger constructor (by @ig-sinicyn)
- #1188 Enforce the users to provide full target framework moniker when using attributes to define multiple runtime jobs (by @adamsitnik)
- #1189 Update HtmlExporter.cs (by @chuuddo)
- #1196 Update Mac Os for Travis CI (by @WojciechNagorski)
- #1199 Rename OutlierMode values (by @AndreyAkinshin)
- #1201 print benchmark process id to the output (better profiler user story) (by @adamsitnik)
- #1203 Easier introduction of new benchmarks (by @Scooletz)
- #1204 Fix casing typo (by @antondahlin)
- #1206 add *.fsproj to the list of supported project types (by @JaggerJo)
- #1208 Support of --profiler NativeMemory command line argument (by @WojciechNagorski)
- #1209 Sorting examples list and adding missing pages (by @WojciechNagorski)
- #1212 Plots with a double dash (--) in the names (#1183) (by @marcnet80)
- #1213 print full architecture name (by @adamsitnik)
- #1214 Add documentation to NativeMemoryDiagnoser (by @WojciechNagorski)
- #1217 Log shows a wrong name for plot images #1181 (by @marcnet80)
- #1218 NativeMemoryProfiler -add count of allocated object (by @WojciechNagorski)
- #1219 Add links to blogs. (by @WojciechNagorski)
- #1222 Enhance rscript location (by @tebeco)
- #1225 Documentation: Fix some typos in the documentation (by @MSeifert04)
- #1227 Threading Diagnoser (by @adamsitnik)
- #1228 Support IEnumerable as benchmark argument (by @adamsitnik)
- #1230 further runtime detection improvements (by @adamsitnik)
- #1231 Fix iteration cleanup bug (by @adamsitnik)
- #1232 Fixed dots at the end (not used in other places) (by @cincuranet)
- #1233 try to read .NET Core version from all available information (by @adamsitnik)
- #1237 The null ArtifactsPath value causes exception for all EtwProfiler (by @WojciechNagorski)
- #1239 Add using statement to sample snippet (by @b8adamson)
- #1240 Amend SummaryStyle to support visualization of '0' in reports (by @sleemer)
- #1245 LINQPad 6 support using InProcessEmitToolchain (by @adamsitnik)
- #1252 Add possibility to disable the log file (by @CodeTherapist)
- #1255 Update Build Tools to use .NET Core SDK to 3.0.100 (by @CodeTherapist)
- #1257 Task remove unused nuget packages (by @WojciechNagorski)
- #1259 Task remove trailing whitespace (by @WojciechNagorski)
- #1260 Fix ca1825 rule - Avoid zero-length array allocations (by @WojciechNagorski)
- #1261 Fix CA2000 - Add missing using (by @WojciechNagorski)
- #1265 make it possible to configure MaxParamterColumnWidth (by @adamsitnik)
- #1268 Fix compilation error with post v3.3.1 Roslyn (by @stanciuadrian)
- #1277 change the runtimes API (by @adamsitnik)
- #1279 Improve documentation for version 0.12.0 (by @WojciechNagorski)
- #1281 Print GC and threading stats only if needed (by @WojciechNagorski)
Commits (110)
- 881c6d Postrelease update of v0.11.5 changelog (by @AndreyAkinshin)
- a2bddf Fix release date for v0.11.5 in changelog (by @AndreyAkinshin)
- c0c91a Consume CoreRT from the new NuGet feed (#1129) (by @MichalStrehovsky)
- 40dcab allow namespace filtering for InliningDiagnoser (#1106) (#1130), fixes #1106 (by @MarekM25)
- 12fdbe + InProcessNoEmitToolchain (#1123) (by @ig-sinicyn)
- 62d6af Bump docfx version to 2.42.1 (by @AndreyAkinshin)
- 40901c Add sitemap generation in docfx.json (see #1137) (by @AndreyAkinshin)
- 04ec20 add Guid support to code templates (by @adamsitnik)
- 4e9eb4 Better precision calculation in SummaryTable (by @AndreyAkinshin)
- df6f91 Added workaround to fix incorrect CPU info when using wmic (#1145) (by @YohDeadfall)
- 9065c7 Make ids for tag columns unique, fixes #1146 (by @AndreyAkinshin)
- 527c95 Improve AskUser prompt message, fixes #1147 (by @AndreyAkinshin)
- 45253c Flush custom loggers at the end of benchmark session, fix #1134 (by @AndreyAkinshin)
- 21175b Make log file datetime format 24-hour, fix #1149 (by @AndreyAkinshin)
- 0dfa37 Power-Management extension (#1132) (#1139) (by @MarekM25)
- f54055 Use new .NET Core 3.0 API to get the total number of allocated bytes for all ... (by @adamsitnik)
- aa17ec improve the output path of .etl files produced by EtwProfiler, fixes #1156, f... (by @adamsitnik)
- ec296d make ArgumentsSource support IEnumerable<object[]> for benchmarks accepting a... (by @adamsitnik)
- 96f162 write "Setup power plan" in a separate line (by @adamsitnik)
- 063d1a copy PreserveCompilationContext MSBuild setting from the project that defines... (by @adamsitnik)
- 1578c5 make it possible to not enforce power plan, move the revert to finally, simpl... (by @adamsitnik)
- 0513a7 remove the test that requires a manual update every time we add a new charact... (by @adamsitnik)
- 6e6559 extend Summary with LogFilePath, fixes #1135 (by @adamsitnik)
- 6d7130 make FullNameProvider public so it can be reused by the dotnet/performance re... (by @adamsitnik)
- 6f91ea Drop netcoreapp2.0 TFM in sample and test projects (see #1141) (by @AndreyAkinshin)
- bfe676 Warn the user when benchmark baseline value is too close to zero and the colu... (by @mhmd-azeez)
- 4282b1 Update year in LICENSE.md (by @AndreyAkinshin)
- 29d01b Improve search experience in the documentation (#1148) (by Sylvain Pace)
- ddf1b8 Fixed: broken link in readme.md (by @Ant-hem)
- fc35f7 simplify the reported Full .NET Framework version, fixes 1111 (#1114) (by @adamsitnik)
- 0a4550 Updated index.md and fixed Relative performance (#1173) (by @sergey-litvinov)
- a106b1 Add System.Buffers.ArrayPoolEventSource to the list of default .NET Providers... (by @adamsitnik)
- c022e7 Update docstring for IterationSetup/IteraitonCleanup (by @billwert)
- 31cb34 Invalid arg passing in StreamLogger constructor (#1185) (by @ig-sinicyn)
- fc8867 Make netcoreapp2.1 default (#1163) (by @adamsitnik)
- 0f210c Add support for --runtimes net48, fixes #1186 (by @adamsitnik)
- 48a9de When user uses --packages $path, the $path should be sent to dotnet build com... (by @adamsitnik)
- dfa074 Update HtmlExporter.cs (#1189) (by @chuuddo)
- 8b018d doc update: InProc toolchain supports Arguments now, we use Median instead of... (by @adamsitnik)
- ae23bd add the possibility to pass config to BenchmarkSwitcher.RunAll and RunAllJoin... (by @adamsitnik)
- 94b788 Update Mac Os for Travis CI (#1196), fixes #1195 (by @WojciechNagorski)
- 58fde6 Use Sheather&Jones bandwidth selector for density plots in RPlotExporter (by @AndreyAkinshin)
- 0e4b8e Rename OutlierMode values (#1199) (by @AndreyAkinshin)
- 863c65 Added information about what a Gen X column means (#1175) (by @jigargandhi)
- 70c5b3 print benchmark process id to the output (better profiler user story) (#1201) (by @adamsitnik)
- 55cba0 Easier introduction of new benchmarks (#1203) (by @Scooletz)
- 31bb6f Fix casing typo (#1204) (by @antondahlin)
- e92abf NativeMemoryDiagnoser (#1131), fixes #457 (by @WojciechNagorski)
- d04a01 update list of supported project types (#1206) (by @JaggerJo)
- 5db67b Sorting examples list and add missing pagges (#1209) (by @WojciechNagorski)
- 6620cd print full architecture name (#1213) (by @adamsitnik)
- 705bc3 Add documentation to NativeMemoryDiagnouser (#1214) (by @WojciechNagorski)
- 9caa05 Support of --profiler NativeMemory command line argument (#1208) (by @WojciechNagorski)
- 5d7c78 Plots with a double dash (--) in the names (#1183) (#1212) (by @marcnet80)
- d0d883 Extend NativeMemoryProfiler with the number of allocated objects (#1218) (by @WojciechNagorski)
- 09aba3 Add links to blogs. (#1219) (by @WojciechNagorski)
- a200af Enforce the users to provide full target framework moniker when using attribu... (by @adamsitnik)
- f8ef67 add release notes for 0.11.6 (by @adamsitnik)
- 88ea5a Documentation: Fix some typos in the documentation (#1225) (by @MSeifert04)
- ea0468 Support IEnumerable as benchmark argument (#1228) (by @adamsitnik)
- 4080ab Threading Diagnoser (#1227) (by @adamsitnik)
- b6d0e0 further runtime detection improvements (#1230), (by @adamsitnik)
- bc9624 Fix iteration cleanup bug (#1231) (by @adamsitnik)
- cfccac Fixed dots at the end (not used in other places) (#1232) (by @cincuranet)
- 61feb7 try to read .NET Core version from all available information (#1233) (by @adamsitnik)
- c06ab7 Add using statement to sample snippet (#1239) (by @b8adamson)
- af9608 The null ArtifactsPath value causes exception for all EtwProfiler (#1237) (by @WojciechNagorski)
- 5f337d chore(tests): extract helper methods to MockFactory (by @sleemer)
- 03e9ce feat(CsvExproter): print '0' instead of '-' in the CSV report (by @sleemer)
- 06f0e7 Improuve link visibility for R installation (by @tebeco)
- a2d9e3 adding example of R_HOME value in the doc to understand it construction (by @tebeco)
- ce5ac8 Enhanced RScript detection, with a Fallback to the PATH if R_HOME points to a... (by @tebeco)
- b86845 not necessary to set rscriptPath to null since it's re-affected right after (by @tebeco)
- ee97ca Change access modifier to private, was not intended to be public (by @tebeco)
- 609eec Log shows a wrong name for plot images #1181 (by @marcnet80)
- 76096e Add "dotnet new" benchmark project template (#1044) (by @CodeTherapist)
- b7cbdf Update year in license (docs) (by @AndreyAkinshin)
- 29919d Remove extra spaces in template *proj files (by @AndreyAkinshin)
- 80ccfd Add some readonly modifiers (by @AndreyAkinshin)
- d6a697 Improve MannWhitneyTest precision for small samples (by @AndreyAkinshin)
- 9ba645 Fix CurrentRuntimeIsProperlyRecognized for NETFRAMEWORK case on Linux/macOS (by @AndreyAkinshin)
- 24fda9 LINQPad 6 support using InProcessEmitToolchain (#1245) (by @adamsitnik)
- e01e0d Fix typos in attribute messages (by @AndreyAkinshin)
- 56a71f Add possibility to disable the log file (#1252) (by @CodeTherapist)
- 3c4ec9 remove unused nuget packages (#1257) (by @WojciechNagorski)
- 61cc56 Add missing using (#1261) (by @WojciechNagorski)
- cd88ed Fix ca1825 rule - Avoid zero-length array allocations (#1260) (by @WojciechNagorski)
- 2ba303 Task remove trailing whitespace (#1259) (by @WojciechNagorski)
- e1c4aa Fix compilation error with post v3.3.1 Roslyn (#1268) (by @stanciuadrian)
- 4ec888 make it possible to configure MaxParamterColumnWidth (#1265), fixes #1269 (by @adamsitnik)
- 51f53a CombinedDisassemblyExporter output should be aligned to left, not right (by @adamsitnik)
- f89091 Add EdPeltChangePointDetector (by @AndreyAkinshin)
- da63e8 change the runtimes API (#1277) (by @adamsitnik)
- 5333d5 Change next version number from 0.11.6 to 0.12.0 (by @AndreyAkinshin)
- 52cc45 NativeMemoryProfiler instead of NativeMemoryDiagnoser (#1279) (by @WojciechNagorski)
- f86e13 Print GC and threading stats if needed (#1281) (by @WojciechNagorski)
- a08062 Rename some obsolete TargetFrameworkMoniker names to RuntimeMoniker (by @AndreyAkinshin)
- 7fdee8 Fix JitOptimizationsValidatorIsMandatoryByDefault in DEBUG mode (by @AndreyAkinshin)
- f2639e Move ImmutableConfigTests from IntegrationTests to regular unit tests (by @AndreyAkinshin)
- 4f6a6b Fix diagnoser tests in ImmutableConfigTests (by @AndreyAkinshin)
- 0768b7 Fix some typos in identifiers (by @AndreyAkinshin)
- 28bb7c Bump DocFX version from 2.42.1 to 2.46 (by @AndreyAkinshin)
- af9ff5 Fix mistakes in old changelogs (by @AndreyAkinshin)
- c5aa4f Prepare v0.12.0 changelog (by @AndreyAkinshin)
- cb1575 Add BenchmarkDotNet.Templates in build-and-pack.cmd (by @AndreyAkinshin)
- bc7cb8 Improve v0.12.0 release notes (by @AndreyAkinshin)
- c5ac2f Fix bug in BaselineCustomAnalyzer (by @AndreyAkinshin)
- d75b1b Add .NET Core 2.2 and .NET Core 3.0 support in BenchmarkDotNet.Tool (by @AndreyAkinshin)
- d582b5 Revert previous commit because of the CI Error (by @AndreyAkinshin)
- 7bdf6e Set library version: 0.12.0 (by @AndreyAkinshin)
Contributors (25)
- Adam Sitnik (@adamsitnik)
- Adrian Stanciu (@stanciuadrian)
- Andrey Akinshin (@AndreyAkinshin)
- Antoine Hémery (@Ant-hem)
- Anton Dahlin (@antondahlin)
- b8adamson (@b8adamson)
- Bill Wert (@billwert)
- Code Therapist (@CodeTherapist)
- ig-sinicyn (@ig-sinicyn)
- Ilya Chudin (@chuuddo)
- Jigar (@jigargandhi)
- Jiri Cincura ↹ (@cincuranet)
- Josua Jäger (@JaggerJo)
- marcnet80 (@marcnet80)
- Marek Moraczyński (@MarekM25)
- Michael Seifert (@MSeifert04)
- Michal Strehovský (@MichalStrehovsky)
- Muhammad Azeez (@mhmd-azeez)
- Sergey Litvinov (@sergey-litvinov)
- Sylvain Pace
- Szymon Kulec (@Scooletz)
- TeBeCo (@tebeco)
- Vlad Kovalev (@sleemer)
- Wojciech Nagórski (@WojciechNagorski)
- Yoh Deadfall (@YohDeadfall)
Thank you very much!
Additional details
Date: October 24, 2019
Milestone: v0.12.0 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.12.0
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.12.0
- https://www.nuget.org/packages/BenchmarkDotNet.Tool/0.12.0
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.12.0
- https://www.nuget.org/packages/BenchmarkDotNet.Templates/0.12.0
BenchmarkDotNet v0.11.5
Highlights
- Features and noticeable improvements
- Power plan management
Now BenchmarkDotNet executes all benchmarks with enabled High-Performance power plan (configurable, Windows-only). You can find some details below. #68 #952 - Better Environment Variables API
Now we have some additional extension methods which allow defining environment variables in user jobs. In the previous version, users always had to set an array of environment variables like this:job.With(new[] { new EnvironmentVariable("a", "b") })
. Now it's possible to define an environment variable likejob.With(new EnvironmentVariable("a", "b"))
orjob.WithEnvironmentVariable("a", "b")
. Also, it's possible to clear the list of environment variables viajob.WithoutEnvironmentVariables()
. #1069 #1080 - Better outlier messages
The previous version of BenchmarkDotNet printed information about detected or removed outliers like this: "3 outliers were detected". It was nice, but it didn't provide additional information about these outliers (users had to read the full log to find the outliers values). Now BenchmarkDotNet prints additional information about outlier values like this: "3 outliers were detected (2.50 us..2.70 us)". e983cd31 - Support modern CPU architecture names
In the environment information section, BenchmarkDotNet prints not only the processor brand string, but also its architecture (e.g., "Intel Core i7-4770K CPU 3.50GHz (Haswell)"). However, it failed to recognize some recent processors. Now it's able to detect the architecture for modern Intel processors correctly (Kaby Lake, Kaby Lake R, Kaby Lake G, Amber Lake Y, Coffee Lake, Cannon Lake, Whiskey Lake). 995e053d - Introduce BenchmarkDotNet.Annotations
Currently, BenchmarkDotNet targets .NET Standard 2.0. It makes some users unhappy because they want to define benchmarks in projects with lower target framework. We decided to start working on theBenchmarkDotNet.Annotations
NuGet package which targets .NET Standard 1.0 and contains classes that users need to define their benchmarks. However, it's not easy to refactor the full source code base and move all relevant public APIs to this package. In v0.11.5, we did the first step and moved some of these APIs toBenchmarkDotNet.Annotations
. We want to continue moving classes to this package and get full-featured annotation package in the future. #1084 #1096 - Use InProcessEmitToolchain by default in InProcess benchmarks
In BenchmarkDotNet 0.11.4, we introducedInProcessEmitToolchain
. It's a new, full-featured InProcess toolchain which allows executing benchmarks in the current process without spawning additional process per benchmark. It supports[Arguments]
,[ArgumentsSource]
, passing the arguments byout
,ref
and returning stack-only types likeSpan<T>
. However, in v0.11.4, it can be activated only ifInProcessEmitToolchain
is declared explicitly. Now it's enabled by default when[InProcessAttribute]
is used. #1093 - Introduce an option which prevents overwriting results
Currently, BenchmarkDotNet overwrites results each time when the benchmarks are executed. It allows avoiding tons of obsolete files in theBenchmarkDotNet.Artifacts
folder. However, the behavior doesn't fit all use cases: sometimes users want to keep results for old benchmark runs. Now we have a special option for it. The option can be activated via--noOverwrite
console line argument orDontOverwriteResults
extension method forIConfig
#1074 #1083
- Power plan management
- Other improvements and bug fixes
- Diagnostics and validation
- Better benchmark declaration error processing
In the previous version, BenchmarkDotNet threw an exception when some benchmark methods had an invalid declaration (e.g., invalid signature or invalid access modifiers). Now it prints a nice error message without ugly stack traces. #1107 - Better error message for users who want to debug benchmarks
#1073 - Don't show the same validation error multiple times
Now each error will be printed only once. #1079 - Restrict MemoryDiagnoserAttribute usage to class
Now it's impossible to accidentally mark a method with this attribute. #1119 #1122
- Better benchmark declaration error processing
- Export
- Better indentation in disassembly listings
Now DissassemblyDiagnoser correctly process source code which contains tab as the indentation symbol #1110 - Fix incorrect indentation for StackOverflow exporter
Previously, StackOverflow exporter doesn't have a proper indent for job runtimes in the environment information. Now it's fixed. #826 #1104 - Fix StackOverflowException in XmlExporter.Full
#1086 #1090 - Shortify MemoryDiagnoser column titles
Now we use the following column titles: "Allocated" instead of "Allocated Memory/Op", "Gen 0" instead of "Gen 0/1k Op". The full description of each column can be found in the legend section below the summary table. #1081
- Better indentation in disassembly listings
- Benchmark generation and execution
- Fixed broken Orderers
The previous version has a nasty bug with custom orderers. Now it's fixed. #1070 #1109 - Better overhead evaluation
In the previous version, BenchmarkDotNet evaluated the benchmark overhead as a mean value of all overhead iteration. It was fine in most cases, but in some cases, the mean value can be spoiled by outliers. Now BenchmarkDotNet uses the median value. #1116 - Respect CopyLocalLockFileAssemblies
Now BenchmarkDotNet respect theCopyLocalLockFileAssemblies
value and copies it to the generated benchmark project. #1068 #1108 - Disable CodeAnalysisRuleSet for generated benchmarks
Previously, generated benchmarks may fail if theCodeAnalysisRuleSet
is defined inDirectory.Build.Props
. #1082 - Supported undefined enum values
#1020 #1071
- Fixed broken Orderers
- Other minor improvements and bug fixes
- Diagnostics and validation
Power plans
In #952, power plan management was implemented. It resolves a pretty old issue #68 which was created more than three years ago. Now BenchmarkDotNet forces OS to execute a benchmark on the High-Performance power plan. You can disable this feature by modifying PowerPlanMode property. Here is an example where we are playing with this value:
[Config(typeof(Config))]
public class IntroPowerPlan
{
private class Config : ManualConfig
{
public Config()
{
Add(Job.MediumRun.WithPowerPlan(PowerPlan.HighPerformance));
Add(Job.MediumRun.WithPowerPlan(PowerPlan.UserPowerPlan));
}
}
[Benchmark]
public int IterationTest()
{
int j = 0;
for (int i = 0; i < short.MaxValue; ++i)
j = i;
return j;
}
[Benchmark]
public int SplitJoin()
=> string.Join(",", new string[1000]).Split(',').Length;
}
And here is an example of the summary table on plugged-off laptop:
Method | PowerPlan | Mean | Error | StdDev |
-------------- |---------------- |---------:|----------:|----------:|
IterationTest | HighPerformance | 40.80 us | 0.4168 us | 0.6109 us |
SplitJoin | HighPerformance | 13.24 us | 0.2514 us | 0.3763 us |
IterationTest | UserPowerPlan | 79.72 us | 2.5623 us | 3.8352 us |
SplitJoin | UserPowerPlan | 24.54 us | 2.1062 us | 3.1525 us |
As you can see, the power plan produces a noticeable effect on the benchmark results.
This feature is available on Windows only.
Milestone details
In the v0.11.5 scope, 16 issues were resolved and 16 pull requests were merged. This release includes 44 commits by 12 contributors.
Resolved issues (16)
- #68 Power management
- #826 MarkdownExporter.StackOverflow fails to indent jobs' runtime descriptions (assignee: @alinasmirnova)
- #976 System.NotSupportedException: Line must start with GC (assignee: @adamsitnik)
- #1020 Errors using undefined enum values as benchmark arguments (assignee: @adamsitnik)
- #1068 The csproj setting CopyLocalLockFileAssemblies is ignored
- #1070 System.InvalidOperationException: Sequence contains more than one matching element after 0.11.4 (assignee: @AndreyAkinshin)
- #1071 Enum flags results into compiler errors (assignee: @adamsitnik)
- #1073 The error message for users who want to Debug benchmarks is not clear (assignee: @adamsitnik)
- #1074 Results should be exported to a file with unique name
- #1079 Dont display the same Validation Error many times (assignee: @adamsitnik)
- #1086 XmlExporter.Full fails with StackOverflowException
- #1107 Unhandled Exception: System.InvalidOperationException: Benchmark method '' has incorrect signature. Method shouldn't have any arguments. (assignee: @AndreyAkinshin)
- #1109 Issue with DefaultOrderer
- #1110 DisassemblyDiagnoser assumes indentation uses spaces (assignee: @AndreyAkinshin)
- #1116 Use Median instead of Mean whe deducing Overhead (assignee: @AndreyAkinshin)
- #1119 MemoryDiagnoserAttribute on methods (assignee: @Rizzen)
Merged pull requests (16)
- #952 Implemented power-management, add docs (#68) (by @MarekM25)
- #1080 Improved Environment Variables API, resolves #1069 (by @AndreyAkinshin)
- #1081 Shortify MemoryDiagnoser column titles (by @AndreyAkinshin)
- #1082 Make it so that the code analysis settings are disabled. (by @glennawatson)
- #1083 make it possible to Don't Overwrite Results, fixes #1074 (by @adamsitnik)
- #1084 introduce BenchmarkDotNet.Annotations (by @adamsitnik)
- #1088 Typo (by @Stromberg90)
- #1090 XmlExporter.Full fails (by @daveMueller)
- #1093 make InProcessEmitToolchain the default one (by @adamsitnik)
- #1096 move more simple Attributes to BenchmarkDotNet.Annotations (by @adamsitnik)
- #1104 fix #826 (by @alinasmirnova)
- #1105 Just spell check (by @sungam3r)
- #1108 Fix #1068 - Copy value of CopyLocalLockFileAssemblies (by @WojciechNagorski)
- #1112 Fixed event wire-up before Session acquisition (by @jzabroski)
- #1122 Restrict MemoryDiagnoserAttribute usage to class (by @Rizzen)
- #1126 Styling in docfx fashion (by @robertmuehsig)
Commits (44)
- 0a63e4 Postrelease update of v0.11.4 changelog (by @AndreyAkinshin)
- f94616 Fix namespace for JobTests (by @AndreyAkinshin)
- 995e05 Support modern CPUs in ProcessorBrandStringHelper (by @AndreyAkinshin)
- f946ba Repair custom orderers, fixes #1070 (by @AndreyAkinshin)
- 1d3783 allow passing Enum Flags and undefined enum values as benchmarks arguments/pa... (by @adamsitnik)
- dfe9ca make sure that we can pass undefined enum values and the bug never comes back... (by @adamsitnik)
- 76b467 improve the error message when users try to run the benchmarks in Debug, fixe... (by @adamsitnik)
- 98d9f8 Dont display the same Validation Error many times, fixes #1079 (by @adamsitnik)
- 03981c fix the unit test that I broke when I was fixing #1071 (by @adamsitnik)
- 877aba Throw exception about private benchmark method (by @AndreyAkinshin)
- e983cd Print some outlier values in OutliersAnalyser (by @AndreyAkinshin)
- b5d324 Shortify MemoryDiagnoser column titles (#1081) (by @AndreyAkinshin)
- c5c4c4 handle undefined negative enum values, #1020 (thanks @TylerBrinkley) (by @adamsitnik)
- 2f273c Improved Environment Variables API, resolves #1069 (#1080) (by @AndreyAkinshin)
- ff2847 Implement FrequencyTests.ParseTest (by @AndreyAkinshin)
- 5e25da Make it so that the code analysis settings are disabled for compiled builds (... (by @glennawatson)
- db701e make it possible to Don't Overwrite Results, fixes #1074 (#1083) (by @adamsitnik)
- a12d8c introduce BenchmarkDotNet.Annotations (#1084) (by @adamsitnik)
- dcc40a Typo (#1088) (by @Stromberg90)
- 2c392a XmlExporter.Full fails #1090 (by @daveMueller)
- 8968bb make InProcessEmitToolchain the default one (#1093) (by @adamsitnik)
- 4c9136 move more simple Attributes to BenchmarkDotNet.Annotations (#1096) (by @adamsitnik)
- 6f524f Added extra output lines for jobs in test (by @alinasmirnova)
- 27ed8a Logger with prefix works correctly with multiline input (by @alinasmirnova)
- a846b8 just spell check (#1105) (by @sungam3r)
- a2da9a Reverted reporter change (by @alinasmirnova)
- e1c9b9 Merge pull request #1104 from alinasmirnova/master (by @AndreyAkinshin)
- e45adc Fix #1068 - Copy value of CopyLocalLockFileAssemblies (#1108) (by @WojciechNagorski)
- 2f823c don't fail with exception if user has written something to output in GlobalCl... (by @adamsitnik)
- 8bc2cc Fixed event wire-up before Session acquisition (#1112) (by @jzabroski)
- db3a8f Better handling of benchmark with incorrect signature, fixes #1107 (by @AndreyAkinshin)
- 8a8e01 Fix GlobalSetupAttributeMethodsMustHaveNoParameters (by @AndreyAkinshin)
- 52eca7 Better disasm indentation, fixes #1110 (by @AndreyAkinshin)
- d9901b Use Median instead of Mean for overhead calculations, fixes #1116 (by @AndreyAkinshin)
- 1c1913 add dotnet/performance to the list of users (by @adamsitnik)
- e1d4d2 Restrict MemoryDiagnoserAttribute usage to class (#1122), fixes #1119 (by @Rizzen)
- 8aa6ad Implemented power-management, add docs (#68) (#952) (by @MarekM25)
- 9c6cad Improve ApplyUserPowerPlan message (by @AndreyAkinshin)
- d12414 Initial v0.11.5 changelog (by @AndreyAkinshin)
- 1babcb styling in docfx fashion (by @robertmuehsig)
- fb1286 Add netstandard2.0 target framework in BenchmarkDotNet.Annotations (by @AndreyAkinshin)
- b7118e Add BenchmarkDotNet.Annotations in build-and-pack.cmd (by @AndreyAkinshin)
- 8721a9 Prepare v0.11.5 changelog (by @AndreyAkinshin)
- 31ea3d Set library version: 0.11.5 (by @AndreyAkinshin)
Contributors (12)
- Adam Sitnik (@adamsitnik)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin (@AndreyAkinshin)
- David Müller (@daveMueller)
- Glenn (@glennawatson)
- Ivan Maximov (@sungam3r)
- John Zabroski (@jzabroski)
- Marek Moraczyński (@MarekM25)
- Mark Tkachenko (@Rizzen)
- Robert Muehsig (@robertmuehsig)
- Strømberg (@Stromberg90)
- Wojciech Nagórski (@WojciechNagorski)
Thank you very much!
Additional details
Date: April 2, 2019
Milestone: v0.11.5 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.11.5
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.11.5
- https://www.nuget.org/packages/BenchmarkDotNet.Tool/0.11.5
- https://www.nuget.org/packages/BenchmarkDotNet.Annotations/0.11.5
BenchmarkDotNet v0.11.4
It's been few months since our last release, but we have been working hard and have some new features for you!
Highlights
- Features
- BenchmarkDotNet as a global tool: a new global tool which allows you to run benchmarks from given library.
Now you can run benchmarks from the command line via
dotnet benchmark
. You can find more information about it in the documentation #1006 #213 - InProcessEmitToolchain: new, full-featured InProcess toolchain which allows executing benchmarks in the current process
without spawning additional process per benchmark.
It supports
[Arguments]
,[ArgumentsSource]
, passing the arguments byout
,ref
and returning stack-only types likeSpan<T>
. #919, #921 #843 - ARM support: BenchmarkDotNet supports now ARM and ARM64. #780, #979 #385
- Mono AOT support: a new toolchain which allows running benchmarks using AOT version of Mono #940
- NuGet symbol server support: BenchmarkDotNet publishes now the symbols to NuGet.org symbol server and you can easily debug it. #967 #968
- Experimental support for .NET Core 3.0 WPF benchmarks #1066 For a working example please go to https://github.com/dotMorten/WPFBenchmarkTests
- BenchmarkDotNet as a global tool: a new global tool which allows you to run benchmarks from given library.
Now you can run benchmarks from the command line via
- Improvements:
- CoreRT Toolchain improvements - thanks to help from CoreRT Team we were able to make the CoreRT Toolchain work with the latest version of CoreRT #1001, #1057
- Display the number of benchmarks to run: we now display how many benchmarks are going to be executed before running them and how many remained after running each of them #1048
- Better list of suggested benchmarks for wrong filter #834 #957
- Invalid assembly binding redirects generated by VS were a pain to many of our users, we have now implemented an approach that tries to work around this issue. #895, #667, #896, #942
- Handling duplicates in IConfig #912, #938, #360, #463
- Disassembly diagnoser should be kept in a separate directory to avoid dependency conflicts #1059
- Give a warning when the
[Benchmark]
method is static - we now produce an error when users fail into this common issue #983 #985 - C# keywords are prohibited as benchmark names #849
- File names should be consistent across all OSes -
<
and>
are valid on Unix, but not on Windows. We have unified that and now files produced on Unix and Windows have the same names. #981 - Improve restore, build and publish projects #1002, #1013
- Make it possible to disable OptimizationsValidator #988
- Sort enum parameters by value instead of name #977
- Detect .NET Core benchmark failures from LINQPad #980
- Improved error logging #1008
- Improved disassembly diff #1022
- Using invariant culture for Roslyn Toolchain error messages #1042
- Use only full names in the auto-generated code to avoid any possible conflicts with user code #1007, #1009 #1010
- Write the GitHub table format to the console by default #1062
- Proper cleanup on Ctrl+C/console Window exit #1061
- Introduce StoppingCriteria - the first step to writing your own heuristic that determines when benchmarking should be stopped #984
- Breaking changes:
- .NET Standard 2.0 only - BenchmarkDotNet has a single target now, which should help with some assembly resolving issues. We had to drop .NET 4.6 support because of that and .NET 4.6.1 is now the oldest supported .NET Framework. #1032
- CustomCoreClrToolchain has been removed, it's recommended to use CoreRunToolchain instead #928
- Bug fixes:
- NRE in
Summary
ctor #986 #987 - ArgumentNullException when running benchmarks from published .NET Core app #1018
- Dry jobs can eat iteration failures #1045
- NullReferenceException in BenchmarkDotNet.Reports.SummaryTable after iteration failure #1046
- Running the example throws NullReference #1049
- Fix race condition in process output reader #1051 #1053
- Fix a rare but really annoying bug where for some reason we were sometimes setting ForegroundColor to the same color as BackgroundColor and some parts of the logged output were invisible commit
- StopOnFirstError must be respected commit
- NRE in
Milestone details
In the v0.11.4 scope, 42 issues were resolved and 41 pull requests were merged. This release includes 99 commits by 18 contributors.
Resolved issues (42)
- #213 Add a "benchmark" cmd to dotnet
- #343 FileNotFoundException on mono (assignee: @AndreyAkinshin)
- #360 Duplicates handling for IConfig (assignee: @adamsitnik)
- #385 Consider using S.R.InteropServices.RuntimeInformation.ProcessArchitecture instead pointer based detection of platform (assignee: @adamsitnik)
- #387 Add a mode to BenchmarkSwitcher that allows to run a method inline for profiling (assignee: @adamsitnik)
- #463 Review interface IConfig (assignee: @adamsitnik)
- #660 [Params] should not change the order of provided values
- #667 Does BenchMarkDotnet supports 4.7.1 Dotnet framework (assignee: @adamsitnik)
- #687 Implement [Arguments] support for InProcessToolchain (assignee: @ig-sinicyn)
- #714 Test BenchmarkDotNet against unstable/multimodal benchmarks from CoreCLR/CoreFX repo (assignee: @adamsitnik)
- #780 ARM support (assignee: @adamsitnik)
- #834 Better list of suggested benchmarks for wrong filter (assignee: @morgan-kn)
- #843 Exception when returning a stackonly structure in a benchmark case using in-process toolchain (assignee: @ig-sinicyn)
- #849 C# keywords are prohibited as benchmark names (assignee: @adamsitnik)
- #895 Could not load file or assembly 'System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies (assignee: @adamsitnik)
- #896 .NET 4.7.1 console app tries to use BenchmarkRunner, gets "Could not load file or assembly 'System.Runtime, Version=4.1.2.0" (assignee: @adamsitnik)
- #919 Feature proposal: full-featured inprocess toolchain (assignee: @ig-sinicyn)
- #928 Remove CustomCoreClrToolchain (assignee: @adamsitnik)
- #938 Run benchmark with DisasemblyDiagnoser with
--disasam
option from console (assignee: @adamsitnik) - #942 System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.0.0' after adding BenchmarkDotNet.Diagnostics.Windows (assignee: @adamsitnik)
- #967 Publish a snupkg to the NuGet.org symbol server (assignee: @WojciechNagorski)
- #970 False alarm bug report
- #981 File names should be consistent across all OSes (assignee: @adamsitnik)
- #982 Invalid string representaiton of CPU Affinity on a machine with more than 32 cores on ARM64 (assignee: @adamsitnik)
- #983 Give a warning when the [Benchmark] method is static (assignee: @Rizzen)
- #986 NRE in
Summary
ctor - #988 Make it possible to disable OptimizationsValidator (assignee: @adamsitnik)
- #998 Missing images in docs (assignee: @AndreyAkinshin)
- #1002 Multiple build/publish failure with
--coreRun
toolchain (assignee: @WojciechNagorski) - #1007 benchmark cannot have type Action (assignee: @adamsitnik)
- #1010 Write unit tests which check that BenchmarkProgram.txt doesn't contain usings (assignee: @adamsitnik)
- #1018 ArgumentNullException when running benchmarks from published .NET Core app
- #1039 Some tests are broken on Net 461 (culture-dependent thing) (assignee: @ig-sinicyn)
- #1045 Dry jobs can eat iteration failures (assignee: @adamsitnik)
- #1046 NullReferenceException in BenchmarkDotNet.Reports.SummaryTable after iteration failure (assignee: @adamsitnik)
- #1048 Display the number of benchmarks to run (assignee: @adamsitnik)
- #1049 Running the example throws NullReference (assignee: @adamsitnik)
- #1051 Fix race condition in process output reader (assignee: @adamsitnik)
- #1056 Fails to build when targeting .NET Core 3.0 and .NET Framework (assignee: @adamsitnik)
- #1059 Disassembly diagnoser should be kept in a separate directory to avoid dependency conflicts (assignee: @adamsitnik)
- #1062 Write the GitHub table format to the console by default (assignee: @adamsitnik)
- #1065 Allow benchmarking .NET Core Desktop apps (assignee: @adamsitnik)
Merged pull requests (41)
- #912 Duplicates handling for IConfig = big refactor, fixes #360 (by @adamsitnik)
- #921 InProcessEmitToolchain (by @ig-sinicyn)
- #940 Add support for mono AOT pass (by @alexanderkyte)
- #957 Better list of suggested benchmarks for wrong filter #834 (by @morgan-kn)
- #968 Support Nuget symbol server (by @WojciechNagorski)
- #969 Disable batch mode and explicitly enable build trigger for master branch (by @Ky7m)
- #977 sort enum parameters by value instead of name (by @kayle)
- #979 ARM support (by @adamsitnik)
- #980 Detect .NET Core benchmark failures from LINQPad (by @Turnerj)
- #984 Introduce StoppingCriteria (by @AndreyAkinshin)
- #985 Give a warning when the [Benchmark] method is static (by @Rizzen)
- #987 Fix NRE in MetricColumn (#986) (by @qbit86)
- #991 Fix typos (by @0x6a62)
- #992 Use .NET Standard 2.0 CommandLineParser, Update to net461 for NS2.0 support (by @glennawatson)
- #996 Rephrase Notes section and fix markdown (by @Maximusya)
- #997 Remove obsolete info from the docs (by @Maximusya)
- #999 Synchronize benchmark output with the code in docs (by @Maximusya)
- #1001 CoreRT toolchain update (by @adamsitnik)
- #1006 BenchmarkDotNet as global tool (by @CodeTherapist)
- #1008 Improve error logging to diagnose unstable tests (by @adamsitnik)
- #1009 Use only full names in the auto-generated code to avoid any possible conflicts with user code (by @adamsitnik)
- #1012 Changed TargetCount to IterationCount in docs (by @Sitiritis)
- #1013 Improve restore, build and publish projects - Fix for #1002 (by @WojciechNagorski)
- #1014 Update IntroRatioSD.md (by @fredeil)
- #1022 Improve diff disassembly (by @WojciechNagorski)
- #1032 Target .NET Standard 2.0 only (by @adamsitnik)
- #1033 BenchmarkDotNet as global tool (#1006), fixes #213 (by @adamsitnik)
- #1035 Improve global tool (by @WojciechNagorski)
- #1036 Remove InternalsVisibleTo for Samples application (by @WojciechNagorski)
- #1038 Change the name of the global tool (by @WojciechNagorski)
- #1040 Making the new InProcessEmitToolchain work after my recent refactor and .NET Standard 2.0 port (by @adamsitnik)
- #1041 InProcessEmitToolchain (by @adamsitnik)
- #1042 Use invariant culture for csc messages (by @ig-sinicyn)
- #1043 minor InProcess fix: diff now checks for implementation flags (by @ig-sinicyn)
- #1052 dotnet cli version update + reducing the number of long running tests (by @adamsitnik)
- #1053 read the process output in a thread safe way, fixes #1051 (by @adamsitnik)
- #1054 update Travis Ubuntu image from 14.04 to 16.04 (by @adamsitnik)
- #1055 Allow reflecting on DebuggableAttribute on CoreRT (by @MichalStrehovsky)
- #1057 CoreRT toolchain improvements (by @adamsitnik)
- #1061 Proper cleanup on Ctrl+C/console Window exit (by @adamsitnik)
- #1066 Add experimental support for .NET Core 3.0 WPF benchmarks (by @adamsitnik)
Commits (99)
- 1fac9b Postrelease update of v0.11.3 changelog (by @AndreyAkinshin)
- 40fae8 Support Nuget symbol server (#968) (by @WojciechNagorski)
- 69b01f remove batch and explicitly enable build for master (#969) (by @Ky7m)
- 01992c better error messages for lack of Cli and invalid CoreRun path (by @adamsitnik)
- 767e02 sort enum parameters by value instead of name (#977), fixes #660 (by @kayle)
- 128e11 Better list of suggested benchmarks for wrong filter #834 (#957) (by @morgan-kn)
- c0910a Fix NRE in BaselineRatioColumn.GetRatioStatistics, fixes #970 (by @AndreyAkinshin)
- 67b675 Fix TimeSpan calculations in DotNetCliCommand.AddPackages (by @AndreyAkinshin)
- 847c27 Fix a few typos (by @AndreyAkinshin)
- 6fb830 ARM support (#979) (by @adamsitnik)
- 410d14 Detect .NET Core benchmark failures from LINQPad (#980), #975 (by @Turnerj)
- 138325 File names should be consistent across all OSes, fixes #981 (by @adamsitnik)
- add308 test fix for #981 (by @adamsitnik)
- 77ed41 expose OriginalValues and SortedValues in the Statistics type so they get exp... (by @adamsitnik)
- c0aac1 More tests for FolderNameHelper (by @AndreyAkinshin)
- 3497ae Better message in MinIterationTimeAnalyser (by @AndreyAkinshin)
- 91e16a Fix duplication of IsLinqPad check (by @AndreyAkinshin)
- 89255c Refactoring xUnit tests to avoid non-serializable objects in MemberData (by @AndreyAkinshin)
- 2cd06a Give a warning when the [Benchmark] method is static (#985) (by @Rizzen)
- 5070af Fix NRE in MetricColumn (#986) (#987) (by @qbit86)
- 17378d Fix typos (#991) (by @0x6a62)
- 2ce35a Fix path to logo in README (by @AndreyAkinshin)
- a20e4b always print the path, args and working dir of the auto-generated executable,... (by @adamsitnik)
- 27dd87 CoreRunToolchain: when the file exists, overwrite it (by @adamsitnik)
- 1b01f3 Remove obsolete info from the docs (#997) (by @Maximusya)
- 299e1f Synchronized benchmark output with the code in docs (#999) (by @Maximusya)
- 0da14b Rephrase Notes section and fix markdown (#996) (by @Maximusya)
- 9e791f CoreRT toolchain update (#1001) (by @adamsitnik)
- 04747a Use only full names in the auto-generated code to avoid any possible conflict... (by @adamsitnik)
- f35465 add unit test that prevents from adding using statements to the code, fixes #... (by @adamsitnik)
- fd0b8c Improve build error logging, increase the default timeout (by @adamsitnik)
- 8276be Changed TargetCount to IterationCount in docs (#1012) (by @Sitiritis)
- 3c98da Update IntroRatioSD.md (#1014) (by @fredeil)
- 286996 Improve restore, build and publish projects - Fix for #1002 (#1013) (by @WojciechNagorski)
- 923b23 BenchmarkDotNet as global tool (#1006), fixes #213 (by @CodeTherapist)
- 7ef5f6 Introduce StoppingCriteria (#984) (by @AndreyAkinshin)
- 5e4428 make SortedValues internal property, don't export it! (by @adamsitnik)
- 5c519f Use .NET Standard 2.0 CommandLineParser, Update to net461 for NS2.0 support (... (by @glennawatson)
- 6ee21b if we fail to do the full build, we try with --no-dependencies (by @adamsitnik)
- 8d9714 Support machines without .NET DevPack, fix #1018 (by @AndreyAkinshin)
- 573566 Add support for mono AOT pass (#940) (by @alexanderkyte)
- 011c79 + InProcessEmitToolchain (by @ig-sinicyn)
- 862e6e InProcessEmitToolchain cleanup (by @ig-sinicyn)
- 252d7a Fix StringCanBePassedToBenchmarkAsReadOnlySpan (by @ig-sinicyn)
- 7ec2f3 Check if there's something wrong with RoslynToolchain on .Net Core (by @ig-sinicyn)
- 57acd6 No NOPs (thanks to @Warpten!) (by @ig-sinicyn)
- bf362a Diff now compares nops (by @ig-sinicyn)
- aa9ff8 + emit correct IL (by @ig-sinicyn)
- 351ca5 Ignore NOPs for ldarg too (by @ig-sinicyn)
- fc530f Fix build after rebase (by @ig-sinicyn)
- 1577ba MonoAotToolchain refactoring, post #940 (by @adamsitnik)
- 6ccf45 Improve diff disassembly (#1022) (by @WojciechNagorski)
- ef090d if we fail to do the full build, we try with --no-dependencies (for the publi... (by @adamsitnik)
- c69934 Give a warning when the [Benchmark] method is static: handle some edge-cases,... (by @adamsitnik)
- 935ead use .NET 4.6.1 everywhere, we don't support 4.6 anymore. Cleanup after #992 (by @adamsitnik)
- 20a011 C# keywords are prohibited for benchmark names, print nice error message, fix... (by @adamsitnik)
- 2aec75 remove CustomCoreClrToolchain, it was causing too much trouble. We can run th... (by @adamsitnik)
- f10752 Duplicates handling for IConfig = big refactor, fixes #360, closes #464 and f... (by @adamsitnik)
- f9c8cc Target .NET Standard 2.0 (#1032), apply a workaround for assembly binding red... (by @adamsitnik)
- aa1ded Merge branch 'master' into tools (by @adamsitnik)
- ccee3e Merge pull request #1033 from dotnet/tools (by @adamsitnik)
- 1b9f9f almost no warnings ;) (by @adamsitnik)
- 3bd18f introduce ConfigOptions - an enum flag which make it easier to introduce new ... (by @adamsitnik)
- 66c264 reverting things that should not introduce problems but did... (by @adamsitnik)
- 33eaeb Merge branch 'master' into feature-inprocessemit (by @adamsitnik)
- a1df27 Merge pull request #921 from ig-sinicyn/feature-inprocessemit (by @adamsitnik)
- aac7a6 Improve global tool (#1035) (by @WojciechNagorski)
- c01bc5 Remove InternalsVisibleTo for Samples application (#1036) (by @WojciechNagorski)
- f6dbe4 Change the name of the global tool (#1038) (by @WojciechNagorski)
- 11d8cb Making the new InProcessEmitToolchain work after my recent refactor and .NET ... (by @adamsitnik)
- e935b5 minor InProcess fix: diff now checks for implementation flags, (#1043) (by @ig-sinicyn)
- da4128 Merge pull request #1041 from dotnet/newInProcess (by @adamsitnik)
- 82170f if global cleanup throws, we should report the problem but don't rethrow beca... (by @adamsitnik)
- 904ddd tests that ensure that when a benchmark throws the runner does not throw, fix... (by @adamsitnik)
- cbdf7b Use invariant culture for csc messages (#1042) (by @ig-sinicyn)
- 5215ee Display the number of benchmarks to run, fixes #1048 (by @adamsitnik)
- 84cc3e dotnet cli version update + reducing the number of long running tests (#1052)... (by @adamsitnik)
- 1c431a read the process output in a thread safe way, fixes #1051 (#1053) (by @adamsitnik)
- 41a367 update Travis Ubuntu image from 14.04 to 16.04 (by @adamsitnik)
- 20744e allow the user to choose the strategy from console line arguments (by @adamsitnik)
- 190b9b Allow reflecting on DebuggableAttribute on CoreRT (#1055) (by @MichalStrehovsky)
- 9dd9e7 Ctlr+C: we should kill the entire process tree, not only for the benchmarks b... (by @adamsitnik)
- d4249f Disassembly diagnoser should be kept in a separate directory to avoid depende... (by @adamsitnik)
- 0b83c9 CoreRT toolchain improvements (#1057) (by @adamsitnik)
- 9bc8f3 0.11.4 initial release notes (by @adamsitnik)
- 13bb97 if the user provide a custom value, we should use it, post #1057 (by @adamsitnik)
- ea3036 fix a rare but really annoying bug where for some reason we were sometimes se... (by @adamsitnik)
- cf3f8c Proper cleanup on Ctrl+C/console Window exit (#1061) (by @adamsitnik)
- 61f563 Write the GitHub table format to the console by default, fixes #1062 (by @adamsitnik)
- 87d281 StopOnFirstError must be respected (by @adamsitnik)
- 413d31 Add experimental support for .NET Core 3.0 WPF benchmarks (#1066), fixes #1065 (by @adamsitnik)
- 69a8aa copy UseWindowsForms too (thanks @onovotny for pointing this out), post #1066 (by @adamsitnik)
- d3379e Bump DocFX version (by @AndreyAkinshin)
- 423204 Remove Version ComboBox in docs (by @AndreyAkinshin)
- 1a8826 Update build-and-pack.cmd (by @AndreyAkinshin)
- 9068d6 Update copyrights in docs (by @AndreyAkinshin)
- c0c2bf Update v0.11.4 changelog (by @AndreyAkinshin)
- e26441 Highlight the first column separator in the console summary table (by @AndreyAkinshin)
- a704a4 Set library version: 0.11.4 (by @AndreyAkinshin)
Contributors (18)
- Adam Sitnik (@adamsitnik)
- Alexander Kyte (@alexanderkyte)
- Andrey Akinshin (@AndreyAkinshin)
- Code Therapist (@CodeTherapist)
- Fredrik Eilertsen (@fredeil)
- Glenn (@glennawatson)
- ig-sinicyn (@ig-sinicyn)
- Igor Fesenko (@Ky7m)
- Irina Ananeva (@morgan-kn)
- James Turner (@Turnerj)
- Jeff B. (@0x6a62)
- kayle (@kayle)
- Maksim Yakimets (@Maximusya)
- Mark Tkachenko (@Rizzen)
- Michal Strehovský (@MichalStrehovsky)
- Tymur Lysenko (@Sitiritis)
- Viktor Ptitselov (@qbit86)
- Wojciech Nagórski (@WojciechNagorski)
Thank you very much!
Additional details
Date: February 15, 2019
Milestone: v0.11.4 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.11.4
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.11.4
- https://www.nuget.org/packages/BenchmarkDotNet.Tool/0.11.4
BenchmarkDotNet v0.11.3
Highlights
This release is focused mainly on bug fixes that were affecting user experience. But don't worry, we have some new features too!
- Diagnosers
- ConcurrencyVisualizerProfiler (allows profiling benchmarks on Windows and exporting the data to a trace file which can be opened with Concurrency Visualizer)
- Command-line:
- Bug fixes:
- Dry mode doesn't work because of the ZeroMeasurementHelper #943
- MannWhitneyTest fails when comparing statistics of different sample size #948 and #950
- Improve the dynamic loading of Diagnostics package #955
- BenchmarkRunner.RunUrl throws NRE when Config is not provided #961
- Don't require the users to do manual installation of TraceEvent when using Diagnostics package #962
- Stop benchmark after closing application + Flush log after stopping benchmark #963
Diagnosers
ConcurrencyVisualizerProfiler
ConcurrencyVisualizerProfiler
allows to profile the benchmarked .NET code on Windows and exports the data to a CVTrace file which can be opened with Concurrency Visualizer.
ConcurrencyVisualizerProfiler
uses EtwProfiler
to get a .etl
file which still can be opened with PerfView or Windows Performance Analyzer. The difference is that it also enables all Task and Thread related ETW Providers and exports a simple xml
which can be opened with Visual Studio if you install Concurrency Visualizer plugin
- #964 Concurrency Visualizer Profiler Diagnoser (by @adamsitnik)
- dfb3c89 ConcurrencyVisualizerProfiler diagnoser! (by @adamsitnik)
Command-line
In this release, we have some new command-line arguments!
--stopOnFirstError
: Stops the benchmarks execution on first error
When provided, BenchmarkDotNet is going to stop the benchmarks execution on first error.
--statisticalTest
: Statistical Test
To perform a Mann–Whitney U Test and display the results in a dedicated column you need to provide the Threshold via
--statisticalTest
. Examples: 5%, 10ms, 100ns, 1s.
Example: run Mann–Whitney U test with relative ratio of 1% for all benchmarks for .NET 4.6 (base), .NET Core 2.0 and .NET Core 2.1.
class Program
{
static void Main(string[] args) => BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
}
public class MySample
{
[Benchmark]
public void Sleep()
{
#if NETFRAMEWORK
Thread.Sleep(50);
#elif NETCOREAPP2_0
Thread.Sleep(45);
#elif NETCOREAPP2_1
Thread.Sleep(55);
#endif
}
[Benchmark]
public void Same() => Thread.Sleep(50);
}
dotnet run -c Release -f netcoreapp2.1 --filter * --runtimes net46 netcoreapp2.0 netcoreapp2.1 --statisticalTest 1%
Note: .NET 4.6 will be our baseline because it was provided as first on the runtimes list.
Method | Runtime | Toolchain | Mean | Error | StdDev | Ratio | MannWhitney(1%) |
---|---|---|---|---|---|---|---|
Sleep | Clr | net46 | 50.51 ms | 0.1833 ms | 0.1714 ms | 1.00 | Base |
Sleep | Core | netcoreapp2.0 | 45.53 ms | 0.1262 ms | 0.1181 ms | 0.90 | Faster |
Sleep | Core | netcoreapp2.1 | 55.50 ms | 0.1217 ms | 0.1138 ms | 1.10 | Slower |
Same | Clr | net46 | 50.47 ms | 0.1795 ms | 0.1679 ms | 1.00 | Base |
Same | Core | netcoreapp2.0 | 50.55 ms | 0.1873 ms | 0.1752 ms | 1.00 | Same |
Same | Core | netcoreapp2.1 | 50.55 ms | 0.2162 ms | 0.2022 ms | 1.00 | Same |
Milestone details
In the v0.11.3 scope, 10 issues were resolved and 10 pull requests were merged. This release includes 26 commits by 6 contributors.
Resolved issues (10)
- #870 Error after adding OperationsPerInvoke (assignee: @AndreyAkinshin)
- #885 Closing application dot't stop benchmark (assignee: @WojciechNagorski)
- #933 Investigate hanging SingleBenchmarkCanBeExecutedForMultipleRuntimes test (assignee: @adamsitnik)
- #939 We need an option to stop running when the first benchmark fails. (assignee: @WojciechNagorski)
- #943 Dry mode doesn't work because of the ZeroMeasurementHelper (assignee: @AndreyAkinshin)
- #948 BenchmarkDotNet.Mathematics.StatisticalTesting.MannWhitneyTest.PValueForSmallN(int n, int m, double u) (assignee: @AndreyAkinshin)
- #950 MannWhitneyTest fails when comparing statistics of different sample size (assignee: @AndreyAkinshin)
- #955 Improve the dynamic loading of Diagnostics package (assignee: @WojciechNagorski)
- #961 BenchmarkRunner.RunUrl throws NRE when Config is not provided
- #964 Concurrency Visualizer Profiler (assignee: @adamsitnik)
Merged pull requests (10)
- #941 Fix example code (isBaseline -> baseline) (by @PathogenDavid)
- #944 Fixed typo in IntroTagColumn sample (by @ahmedalejo)
- #947 Add option to stop running when the first benchmark fails (by @WojciechNagorski)
- #949 Add printDiff in DisassemblyDiagnoserAttribute (by @WojciechNagorski)
- #951 Add failing test for #948 (by @WojciechNagorski)
- #958 Use DependencyContext to load diagnostics assembly (by @WojciechNagorski)
- #960 Expose StatisticalTestColumn via command line arguments (by @adamsitnik)
- #962 Don't require the users to do manual installation of TraceEvent when using Diagnostics package (by @WojciechNagorski)
- #963 Stop benchmark after closing application + Flush log after stopping benchmark. (by @WojciechNagorski)
- #966 Fix typos in ConfigParser and CommandLineOptions (by @morgan-kn)
Commits (26)
- d85a7e Postrelease update of v0.11.2 changelog (by @AndreyAkinshin)
- 8b2015 Fix ZeroMeasurementHelper for dry mode case, fixes #943 (by @AndreyAkinshin)
- ab8543 Fix example code (#941) (by @PathogenDavid)
- ec5fb2 Enable default analysers in BenchmarkTestExecutor (see #943) (by @AndreyAkinshin)
- fb251d Remove [DryJob] from IntroBasic (by @AndreyAkinshin)
- 1c1bdf Fix another problem in ZeroMeasurementAnalyser (see #943) (by @AndreyAkinshin)
- 348f87 make sure we prevent from inlining the benchmarks also in the dummy method ge... (by @adamsitnik)
- 80ecec when the parallel build fails, always try one more time in sequential way, ho... (by @adamsitnik)
- 042291 set the metrics unit to "Count", they should not be empty /cc @jorive (by @adamsitnik)
- 5b3657 Fixed typo in IntroTagColumn sample (#944) (by @ahmedalejo)
- 60ea17 Add printDiff in DisassemblyDiagnoserAttribute (#949) (by @WojciechNagorski)
- b6e8b1 Add failing test for #948 (#951) (by @WojciechNagorski)
- 3e9f73 Fix IndexOutOfRangeException in MannWhitneyTest, fixes #948 (by @AndreyAkinshin)
- 9f33f0 Add option to stop running when the first benchmark fails (#947) (by @WojciechNagorski)
- 376a97 Improve dynamic assembly loading fixes #955 (by @WojciechNagorski)
- 7dffd4 Handle another corner case in AdaptiveHistogramBuilder, fixes #870 (by @AndreyAkinshin)
- dfb3c8 ConcurrencyVisualizerProfiler diagnoser! (by @adamsitnik)
- 7e7dde Fix NRE in BenchmarkRunner.RunUrl, fixes #961 (by @AndreyAkinshin)
- 4e6531 Improve diagnostics dll (#962) (by @WojciechNagorski)
- 6c4a59 Stop benchmark after closing application + Flush log after stopping benchmark... (by @WojciechNagorski)
- 51a965 Expose StatisticalTestColumn via command line arguments (#960) (by @adamsitnik)
- ca188d 0.11.3 initial release notes (by @adamsitnik)
- adde64 Fix typos in ConfigParser and CommandLineOptions (#966) (by @morgan-kn)
- ab96ab make sure we cleanup the Logger after running the benchmark, otherwise AppDom... (by @adamsitnik)
- 91362d Update v0.11.3 changelog (by @AndreyAkinshin)
- e7e4b5 Set library version: 0.11.3 (by @AndreyAkinshin)
Contributors (6)
- Adam Sitnik (@adamsitnik)
- Ahmed Alejo (@ahmedalejo)
- Andrey Akinshin (@AndreyAkinshin)
- David Maas (@PathogenDavid)
- Irina Ananeva (@morgan-kn)
- Wojciech Nagórski (@WojciechNagorski)
Thank you very much!
Additional details
Date: November 20, 2018
Milestone: v0.11.3 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.11.3
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.11.3
BenchmarkDotNet v0.11.2
This release includes many PRs from the Hacktoberfest. We are very grateful to all the contributors who spent their time to help us make BenchmarkDotNet even better!
Highlights
In this release, we have many improvements in different areas:
- Diagnosers
- EtwProfiler (allows profiling benchmarks on Windows and exporting the data to a trace file)
- Execution:
- Comparing NuGet packages (now it's possible to compare different versions of the same package)
- .NET Core 3.0 support
- Deferred Execution Validator
- Command-line:
--list
: List of benchmarks--info
: Print environment info--runtimes
: Choosing execution runtimes (--runtimes net472 netcoreapp2.1
will executed a benchmark on .NET 4.7.2 and .NET Core 2.1)- Options for number of invocations and iterations
- Custom default settings for console argument parser
- Case-insensitive filter
- Benchmarking with different CoreRun instances
- Hardware counters command-line support
- Exporters:
- Markdown output for DisassemblyDiagnoser
- Diff view for disassembler output
- Improved LINQPad support (colored monospaced logs)
- Better CPU brand strings
- Attributes:
- Async
[GlobalSetup]
and[GlobalCleanup]
support - Introduced
[ParamsAllValues]
- Selecting Baseline across Methods and Jobs
- Async
- Statistics:
- Better statistical tests (Welch's t-test and Mann-Whitney U-test)
- ZeroMeasurementAnalyser
- RatioColumn
- Other:
- Azure Pipelines support for internal builds
- Many minor bug fixes
- Improved documentation
- New tests
Diagnosers
EtwProfiler
EtwProfiler
allows to profile the benchmarked .NET code on Windows and exports the data to a trace file which can be opened with PerfView or Windows Performance Analyzer.
EtwProfiler
uses TraceEvent
library which internally uses Event Tracing for Windows (ETW) to capture stack traces and important .NET Runtime events.
Before the process with benchmarked code is started, EtwProfiler starts User and Kernel ETW sessions. Every session writes data to it's own file and captures different data. User session listens for the .NET Runtime events (GC, JIT etc) while the Kernel session gets CPU stacks and Hardware Counter events. After this, the process with benchmarked code is started. During the benchmark execution all the data is captured and written to a trace file. Moreover, BenchmarkDotNet Engine emits it's own events to be able to differentiate jitting, warmup, pilot and actual workload when analyzing the trace file. When the benchmarking is over, both sessions are closed and the two trace files are merged into one.
You can find more details in the documentation and in the blog post by Adam Sitnik.
- #878 EtwProfiler Diagnoser (by @adamsitnik)
- 04a715 EtwProfiler Diagnoser (#878) (by @adamsitnik)
Execution
Comparing NuGet packages
Now it's possible to compare performance of several versions of the same NuGet package. An example:
[Config(typeof(Config))]
public class IntroNuGet
{
// Specify jobs with different versions of the same NuGet package to benchmark.
// The NuGet versions referenced on these jobs must be greater or equal to the
// same NuGet version referenced in this benchmark project.
// Example: This benchmark project references Newtonsoft.Json 9.0.1
private class Config : ManualConfig
{
public Config()
{
var baseJob = Job.MediumRun.With(CsProjCoreToolchain.Current.Value);
Add(baseJob.WithNuGet("Newtonsoft.Json", "11.0.2").WithId("11.0.2"));
Add(baseJob.WithNuGet("Newtonsoft.Json", "11.0.1").WithId("11.0.1"));
Add(baseJob.WithNuGet("Newtonsoft.Json", "10.0.3").WithId("10.0.3"));
Add(baseJob.WithNuGet("Newtonsoft.Json", "10.0.2").WithId("10.0.2"));
Add(baseJob.WithNuGet("Newtonsoft.Json", "10.0.1").WithId("10.0.1"));
Add(baseJob.WithNuGet("Newtonsoft.Json", "9.0.1").WithId("9.0.1"));
}
}
[Benchmark]
public void SerializeAnonymousObject()
=> JsonConvert.SerializeObject(
new { hello = "world", price = 1.99, now = DateTime.UtcNow });
}
See also: BenchmarkDotNet.Samples.IntroNuGet
- #290 Question: Any official way to benchmark same method between different assembly versions?
- #931 Same NuGet version used when benchmarking different packages
- #922 Enables benchmarking betweeen different Nuget packages (by @Shazwazza)
- #932 Partition benchmark run info based on added nuget packages (by @blairconrad)
- 92a786 Enables benchmarking betweeen different Nuget packages (#922) fixes #290 (by @Shazwazza)
- 510685 Partition benchmark run info based on added nuget packages (#932) (by @blairconrad)
- cf84a4 NuGet casing fix (by @AndreyAkinshin)
.NET Core 3.0 support
Now it's possible to run benchmarks on preview versions of .NET Core 3.0.
- #874 .NET Core 3.0 support (assignee: @adamsitnik)
- 2e398c detect .NET Core 3.0 and use the appropriate target framework moniker, fixes ... (by @adamsitnik)
Deferred Execution Validator
In LINQ, execution of a query is usually deferred until the moment when you actually request the data. If your benchmark just returns IEnumerable
or IQueryable
it's not measuring the execution of the query, just the creation.
This is why we decided to warn you about this issue whenever it happens:
Benchmark IntroDeferredExecution.Wrong returns a deferred execution result (IEnumerable<Int32>). You need to either change the method declaration to return a materialized result or consume it on your own. You can use .Consume() extension method to do that.
Don't worry! We are also providing you with a Consume
extension method which can execute given IEnumerable
or IQueryable
and consume its results. All you need to do is to create a Consumer
instance, preferably store it in a field (to exclude the cost of creating Consumer from the benchmark itself) and pass it to Consume
extension method.
Do not call .ToArray()
because it's an expensive operation and it might dominate given benchmark!
See also: BenchmarkDotNet.Samples.IntroDeferredExecution
- #858 Should the Engine iterate over and consume IEnumerable and IQueryable results? (assignee: @adamsitnik)
- cebe2a Deferred Execution Validator, fixes #858 (by @adamsitnik)
Command-line
In this release, we have tons of improvements for command-line experience.
--list
: List of benchmarks
The --list
allows you to print all of the available benchmark names. Available options are:
flat
- prints list of the available benchmarks:--list flat
BenchmarkDotNet.Samples.Algo_Md5VsSha256.Md5
BenchmarkDotNet.Samples.Algo_Md5VsSha256.Sha256
BenchmarkDotNet.Samples.IntroArguments.Benchmark
BenchmarkDotNet.Samples.IntroArgumentsSource.SingleArgument
BenchmarkDotNet.Samples.IntroArgumentsSource.ManyArguments
BenchmarkDotNet.Samples.IntroArrayParam.ArrayIndexOf
BenchmarkDotNet.Samples.IntroArrayParam.ManualIndexOf
BenchmarkDotNet.Samples.IntroBasic.Sleep
[...]
tree
- prints tree of the available benchmarks:--list tree
BenchmarkDotNet
└─Samples
├─Algo_Md5VsSha256
│ ├─Md5
│ └─Sha256
├─IntroArguments
│ └─Benchmark
├─IntroArgumentsSource
│ ├─SingleArgument
│ └─ManyArguments
├─IntroArrayParam
│ ├─ArrayIndexOf
│ └─ManualIndexOf
├─IntroBasic
│ ├─Sleep
[...]
The --list
option works with the --filter
option. Examples:
--list flat --filter *IntroSetupCleanup*
prints:
BenchmarkDotNet.Samples.IntroSetupCleanupGlobal.Logic
BenchmarkDotNet.Samples.IntroSetupCleanupIteration.Benchmark
BenchmarkDotNet.Samples.IntroSetupCleanupTarget.BenchmarkA
BenchmarkDotNet.Samples.IntroSetupCleanupTarget.BenchmarkB
BenchmarkDotNet.Samples.IntroSetupCleanupTarget.BenchmarkC
BenchmarkDotNet.Samples.IntroSetupCleanupTarget.BenchmarkD
--list tree --filter *IntroSetupCleanup*
prints:
BenchmarkDotNet
└─Samples
├─IntroSetupCleanupGlobal
│ └─Logic
├─IntroSetupCleanupIteration
│ └─Benchmark
└─IntroSetupCleanupTarget
├─BenchmarkA
├─BenchmarkB
├─BenchmarkC
└─BenchmarkD
- #905 Implement
--list
- #914 Implement
--list
- fixes #905 (by @wojtpl2) - #916 Update console-args.md - add information about
--list
option (by @wojtpl2) - 330f66 Implement
--list
- fixes #905 (#914) (by @wojtpl2) - 6c7521 Update console-args.md - add information about
--list
option (#916) (by @wojtpl2)
--info
: Print environment info
Some of our users really like the info we print about hardware and OS.
Now we have the --info
console line argument which does not run the benchmarks, but simply prints the info.
BenchmarkDotNet=v0.11.1.786-nightly, OS=Windows 10.0.17134.285 (1803/April2018Update/Redstone4)
Intel Xeon CPU E5-1650 v4 3.60GHz, 1 CPU, 12 logical and 6 physical cores
Frequency=3507500 Hz, Resolution=285.1033 ns, Timer=TSC
.NET Core SDK=3.0.100-alpha1-009642
[Host] : .NET Core 3.0.0-preview1-27004-04 (CoreCLR 4.6.27003.04, CoreFX 4.6.27003.02), 64bit RyuJIT
- #904 Implement
--info
- #907 fixes #904 Implement
--info
(by @lahma) - 4be28d fixes #904 Implement
--info
(#907) (by @lahma)
--runtimes
: Choosing execution runtimes
The --runtimes
or just -r
allows you to run the benchmarks for selected Runtimes. Available options are: Mono, CoreRT, Core, Clr net46, net461, net462, net47, net471, net472, netcoreapp2.0, netcoreapp2.1, netcoreapp2.2, netcoreapp3.0.
Example: run the benchmarks for .NET 4.7.2 and .NET Core 2.1:
dotnet run -c Release -- --runtimes net472 netcoreapp2.1
- #913 .NET Core Toolchains improvements (by @adamsitnik)
- 0f721c make it possible to specify runtimes using explicit tfms like net472 or netco... (by @adamsitnik)
- 1c581e .NET Core Toolchains improvements (#913) (by @adamsitnik)
Options for number of invocations and iterations
--launchCount
- how many times we should launch process with target benchmark. The default is 1.--warmupCount
- how many warmup iterations should be performed. If you set it, the minWarmupCount and maxWarmupCount are ignored. By default calculated by the heuristic.--minWarmupCount
- minimum count of warmup iterations that should be performed. The default is 6.--maxWarmupCount
- maximum count of warmup iterations that should be performed. The default is 50.--iterationTime
- desired time of execution of an iteration. Used by Pilot stage to estimate the number of invocations per iteration. 500ms by default.--iterationCount
- how many target iterations should be performed. By default calculated by the heuristic.--minIterationCount
- minimum number of iterations to run. The default is 15.--maxIterationCount
- maximum number of iterations to run. The default is 100.--invocationCount
- invocation count in a single iteration. By default calculated by the heuristic.--unrollFactor
- how many times the benchmark method will be invoked per one iteration of a generated loop. 16 by default--runOncePerIteration
- run the benchmark exactly once per iteration. False by default.
Example: run single warmup iteration, from 9 to 12 actual workload iterations.
dotnet run -c Release -- --warmupCount 1 --minIterationCount 9 --maxIterationCount 12
- #902 More command line args (by @adamsitnik)
- ba0d22 allow to configure the number of invocations and iterations from command line (by @adamsitnik)
Custom default settings for console argument parser
If you want to have a possibility to specify custom default Job settings programmatically and optionally overwrite it with console line arguments, then you should create a global config with single job marked as .AsDefault
and pass it to BenchmarkSwitcher
together with the console line arguments.
Example: run single warmup iteration by default.
static void Main(string[] args)
=> BenchmarkSwitcher
.FromAssembly(typeof(Program).Assembly)
.Run(args, GetGlobalConfig());
static IConfig GetGlobalConfig()
=> DefaultConfig.Instance
.With(Job.Default
.WithWarmupCount(1)
.AsDefault()); // the KEY to get it working
Now, the default settings are: WarmupCount=1
but you might still overwrite it from console args like in the example below:
dotnet run -c Release -- --warmupCount 2
Case-insensitive filter
The --filter
or just -f
allows you to filter the benchmarks by their full name (namespace.typeName.methodName
) using glob patterns.
Examples:
- Run all benchmarks from System.Memory namespace:
-f System.Memory*
- Run all benchmarks:
-f *
- Run all benchmarks from ClassA and ClassB
-f *ClassA* *ClassB*
Now this filter expression is case-insensitive.
- #864 Make the filter case insensitive (assignee: @adamsitnik)
- 106777 make the filter case insensitive invariant culture, fixes #864 (by @adamsitnik)
Benchmarking with different CoreRun instances
CoreRun is a simpler version of dotnet run
, used for developing CoreCLR and CoreFX.
Typically when working on the performance of .NET Core a developer has more than 1 copy of CoreRun. Example: CoreRun before my changes, and after my changes. This change allows to simply run same benchmark for few different CoreRuns to compare the perf in easy way.
Sample usage:
dotnet run -c Release -f netcoreapp2.1 -- -f *Empty.method --job dry --coreRun
C:\Projects\coreclr_upstream\bin\tests\Windows_NT.x64.Release\Tests\Core_Root\CoreRun.exe
C:\Projects\coreclr_upstream\bin\tests\Windows_NT.x64.Release\Tests\Core_Root_beforeMyChanges\CoreRun.exe
Sample output:
- #925 Make it possible to run the benchmark with multiple CoreRun.exe (assignee: @adamsitnik)
- 901616 when user provides CoreRun path and runtime in explicit way, we should use th... (by @adamsitnik)
- 46bebf allow the users to run the same benchmarks using few different CoreRun.exe, f... (by @adamsitnik)
Hardware counters command-line support
--counters CacheMisses+InstructionRetired
- 1e3df7 make it possible to specify hardware counters from command line (by @adamsitnik)
- a4f91a better handling of edge cases for parsing hardware counters from the console ... (by @adamsitnik)
Exporters
Markdown output for DisassemblyDiagnoser
Now DisassemblyDiagnoser
generates markdown version of the assembly listing.
- #560 Suggestion: markdown output for DisassemblyDiagnoser (assignee: @adamsitnik)
- 1e6235 github markdown exporter for Disassembler, fixes #560 (by @adamsitnik)
Diff view for disassembler output
Now we have PrettyGithubMarkdownDiffDisassemblyExporter
which can generates
nice diffs between assembly listings.
This mode can be activated via the --disasmDiff
command line argument or
the printDiff: true
argument of DisassemblyDiagnoserConfig
.
An output example (Diff between SumLocal and SumField on .NET Core 2.1.4 (CoreCLR 4.6.26814.03, CoreFX 4.6.26814.02), 64bit RyuJIT)
-; BenchmarkDotNet.Samples.IntroDisassemblyRyuJit.SumLocal()
- var local = field; // we use local variable that points to the field
- ^^^^^^^^^^^^^^^^^^
- mov rax,qword ptr [rcx+8]
+; BenchmarkDotNet.Samples.IntroDisassemblyRyuJit.SumField()
int sum = 0;
^^^^^^^^^^^^
- xor edx,edx
- for (int i = 0; i < local.Length; i++)
+ xor eax,eax
+ for (int i = 0; i < field.Length; i++)
^^^^^^^^^
- xor ecx,ecx
- for (int i = 0; i < local.Length; i++)
+ xor edx,edx
+ for (int i = 0; i < field.Length; i++)
^^^^^^^^^^^^^^^^
- mov r8d,dword ptr [rax+8]
- test r8d,r8d
+ mov rcx,qword ptr [rcx+8]
+ cmp dword ptr [rcx+8],0
jle M00_L01
- sum += local[i];
+ sum += field[i];
^^^^^^^^^^^^^^^^
M00_L00:
- movsxd r9,ecx
- add edx,dword ptr [rax+r9*4+10h]
- for (int i = 0; i < local.Length; i++)
+ mov r8,rcx
+ cmp edx,dword ptr [r8+8]
+ jae 00007ff9`0c412c1f
+ movsxd r9,edx
+ add eax,dword ptr [r8+r9*4+10h]
+ for (int i = 0; i < field.Length; i++)
^^^
- inc ecx
- cmp r8d,ecx
+ inc edx
+ cmp dword ptr [rcx+8],edx
jg M00_L00
return sum;
^^^^^^^^^^^
M00_L01:
- mov eax,edx
-; Total bytes of code 34
+ add rsp,28h
+; Total bytes of code 42
- #544 Diff view for disassembler output (assignee: @wojtpl2)
- #927 Improve Disassembly exporters and add PrettyGithubMarkdownDiffDisassemblyExporter (by @wojtpl2)
- #936 Producing the asm diff reports on demand
- #937 Producing the asm diff reports on demand - fix for #936 (by @wojtpl2)
- 1903a1 Improve Disassembly exporters and add PrettyGithubMarkdownDiffDisassemblyExpo... (by @wojtpl2)
- dd103b Producing the asm diff reports on demand - fixes #936 (#937) (by @wojtpl2)
Improved LINQPad support
If you run BenchmarkDotNet v0.11.2+ in LINQPad, your logs will be colored and monospaced:
- #447 Implement ColoredLogger for LinqPad
- #903 Add LINQPad logging (by @bgrainger)
- #915 Use a monospaced font for LINQPad logging output (by @bgrainger)
- c3b609 Add LINQPad logging (#903) (by @bgrainger)
- 10fdd0 Use a monospaced font for LINQPad logging output. (#915) (by @bgrainger)
Better CPU brand strings
We did a lot of changes which improve the presentation form of the CPU brand string. Here is an example of such string in the previous version of BenchmarkDotNet:
AMD Ryzen 7 2700X Eight-Core Processor (Max: 4.10GHz), 1 CPU, 16 logical and 8 physical cores
Now it becomes:
AMD Ryzen 7 2700X 4.10GHz, 1 CPU, 16 logical and 8 physical cores
As you can see, "Eight-Core Processor" was removed (because we already have "8 physical cores"); "(Max: 4.10GHz)" was replaced by 4.10GHz (because the original CPU brand string doesn't contain the nominal frequency).
- #859 Strange max frequency values on Windows (assignee: @Rizzen)
- #909 Improve CPU Brand Strings without frequency
- #860 Fix strange CPU Frequency values (by @Rizzen)
- #910 Simplify AMD Ryzen CPU brand info (by @lahma)
- a78b38 Fix strange CPU Frequency values (#860) (by @Rizzen)
- 5df1e6 Simplify AMD Ryzen CPU brand info (#910) (by @lahma)
Attributes
Async GlobalSetup and GlobalCleanup
Now GlobalSetup and GlobalCleanup methods can be async.
See also: docs.setup-and-cleanup
- #521 Support async Setup/Cleanup
- #892 Added support for async GlobalSetup. (by @dlemstra)
- #923 async GlobalCleanup support (by @dlemstra)
- #926 Added support for async GlobalCleanup. (by @dlemstra)
- e0f7a6 Added support for async GlobalSetup. (#892) (by @dlemstra)
- a971a4 async GlobalCleanup support (#923) (by @dlemstra)
- e4c7b8 Added support for async GlobalCleanup. (#926), fixes #521 (by @dlemstra)
Introduced ParamsAllValues
If you want to use all possible values of an enum
or another type with a small number of values, you can use the [ParamsAllValues]
attribute, instead of listing all the values by hand. The types supported by the attribute are:
bool
- any
enum
that is not marked with[Flags]
Nullable<T>
, whereT
is an enum or boolean
An example:
public class IntroParamsAllValues
{
public enum CustomEnum
{
A,
BB,
CCC
}
[ParamsAllValues]
public CustomEnum E { get; set; }
[ParamsAllValues]
public bool? B { get; set; }
[Benchmark]
public void Benchmark()
{
Thread.Sleep(
E.ToString().Length * 100 +
(B == true ? 20 : B == false ? 10 : 0));
}
}
Output:
Method | E | B | Mean | Error |
---------- |---- |------ |---------:|------:|
Benchmark | A | ? | 101.9 ms | NA |
Benchmark | A | False | 111.9 ms | NA |
Benchmark | A | True | 122.3 ms | NA |
Benchmark | BB | ? | 201.5 ms | NA |
Benchmark | BB | False | 211.8 ms | NA |
Benchmark | BB | True | 221.4 ms | NA |
Benchmark | CCC | ? | 301.8 ms | NA |
Benchmark | CCC | False | 312.3 ms | NA |
Benchmark | CCC | True | 322.2 ms | NA |
// * Legends *
E : Value of the 'E' parameter
B : Value of the 'B' parameter
- #658 [Params] for enums should include all values by default
- #908 Added [ParamsAllValues] (by @gsomix)
- 922dff Added [ParamsAllValues] (#908), fixes #658 (by @gsomix)
- 846d08 ParamsAllValuesValidator fixes (by @AndreyAkinshin)
Selecting Baseline across Methods and Jobs
Now it's possible to mark a method and a job as baselines at the same time:
public class TheBaselines
{
[Benchmark(Baseline = true)]
public void Sleep100ms() => Thread.Sleep(TimeSpan.FromMilliseconds(100));
[Benchmark]
public void Sleep50ms() => Thread.Sleep(TimeSpan.FromMilliseconds(50));
}
static void Main(string[] args)
=> BenchmarkSwitcher
.FromTypes(new[] { typeof(TheBaselines) })
.Run(args,
DefaultConfig.Instance
.With(Job.Core.AsBaseline())
.With(Job.Clr.WithId("CLR 4.7.2")));
- #880 Select Baseline across Methods and Jobs (assignee: @AndreyAkinshin)
- 21a007 Support method-job baseline pairs, fixes #880 (by @AndreyAkinshin)
Statistics
Statistical tests
In this release, statistical testing was significantly improved. Now it's possible to compare all benchmarks against baseline with the help of Welch's t-test or Mann–Whitney U test.
An example:
[StatisticalTestColumn(
StatisticalTestKind.Welch, ThresholdUnit.Microseconds, 1, true)]
[StatisticalTestColumn(
StatisticalTestKind.MannWhitney, ThresholdUnit.Microseconds, 1, true)]
[StatisticalTestColumn(
StatisticalTestKind.Welch, ThresholdUnit.Ratio, 0.03, true)]
[StatisticalTestColumn(
StatisticalTestKind.MannWhitney, ThresholdUnit.Ratio, 0.03, true)]
[SimpleJob(warmupCount: 0, targetCount: 5)]
public class IntroStatisticalTesting
{
[Benchmark] public void Sleep50() => Thread.Sleep(50);
[Benchmark] public void Sleep97() => Thread.Sleep(97);
[Benchmark] public void Sleep99() => Thread.Sleep(99);
[Benchmark(Baseline = true)] public void Sleep100() => Thread.Sleep(100);
[Benchmark] public void Sleep101() => Thread.Sleep(101);
[Benchmark] public void Sleep103() => Thread.Sleep(103);
[Benchmark] public void Sleep150() => Thread.Sleep(150);
}
Output:
Method | Mean | Error | StdDev | Ratio | Welch(1us)/p-values | Welch(3%)/p-values | MannWhitney(1us)/p-values | MannWhitney(3%)/p-values |
---|---|---|---|---|---|---|---|---|
Sleep50 | 53.13 ms | 0.5901 ms | 0.1532 ms | 0.51 | Faster: 1.0000/0.0000 | Faster: 1.0000/0.0000 | Faster: 1.0000/0.0040 | Faster: 1.0000/0.0040 |
Sleep97 | 100.07 ms | 0.9093 ms | 0.2361 ms | 0.97 | Faster: 1.0000/0.0000 | Same: 1.0000/0.1290 | Faster: 1.0000/0.0040 | Same: 1.0000/0.1111 |
Sleep99 | 102.23 ms | 2.4462 ms | 0.6353 ms | 0.99 | Faster: 0.9928/0.0072 | Same: 1.0000/0.9994 | Faster: 0.9960/0.0079 | Same: 1.0000/1.0000 |
Sleep100 | 103.34 ms | 0.8180 ms | 0.2124 ms | 1.00 | Base: 0.5029/0.5029 | Base: 1.0000/1.0000 | Base: 0.7262/0.7262 | Base: 1.0000/1.0000 |
Sleep101 | 103.73 ms | 2.1591 ms | 0.5607 ms | 1.00 | Same: 0.1041/0.8969 | Same: 0.9999/1.0000 | Same: 0.1111/0.9246 | Same: 1.0000/1.0000 |
Sleep103 | 106.21 ms | 1.2511 ms | 0.3249 ms | 1.03 | Slower: 0.0000/1.0000 | Same: 0.9447/1.0000 | Slower: 0.0040/1.0000 | Same: 0.9246/1.0000 |
Sleep150 | 153.16 ms | 3.4929 ms | 0.9071 ms | 1.48 | Slower: 0.0000/1.0000 | Slower: 0.0000/1.0000 | Slower: 0.0040/1.0000 | Slower: 0.0040/1.0000 |
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
Welch(1us)/p-values : Welch-based TOST equivalence test with 1 us threshold. Format: 'Result: p-value(Slower)|p-value(Faster)'
Welch(3%)/p-values : Welch-based TOST equivalence test with 3% threshold. Format: 'Result: p-value(Slower)|p-value(Faster)'
MannWhitney(1us)/p-values : MannWhitney-based TOST equivalence test with 1 us threshold. Format: 'Result: p-value(Slower)|p-value(Faster)'
MannWhitney(3%)/p-values : MannWhitney-based TOST equivalence test with 3% threshold. Format: 'Result: p-value(Slower)|p-value(Faster)'
1 ms : 1 Millisecond (0.001 sec)
The statistical testing is a work-in-progress feature. In future versions of BenchmarkDotNet, we are planning to improve API, fill missed docs, and introduce more parameters for customization.
See also: BenchmarkDotNet.Samples.IntroStatisticalTesting
- 60eca0 Threshold API for WelchTTest; Improve Student accuracy for small n (by @AndreyAkinshin)
- 05cc8d Statistical testing improvements (by @AndreyAkinshin)
ZeroMeasurementAnalyser
When you have an empty benchmark like this
[Benchmark]
public void Empty() { }
The expected duration of this method is zero.
However, you can get the mean value like 0.0023ns
because of the natural noise.
It's a pretty confusing result for many developers.
Since v0.11.2, we have ZeroMeasurementAnalyser
which warn you about such methods.
By default, BenchmarkDotNet automatically evaluate overhead.
In this case, ZeroMeasurementAnalyser
runs Welch's t-test and compare actual and overhead measurements.
If the overhead evaluation is disabled, it runs one-sample Student's t-test against a half of CPU cycle.
RatioColumn
The Ratio
column was formerly known as Scaled
.
The old title was a source of misunderstanding and confusion because
many developers interpreted it as the ratio of means (e.g., 50.46
/100.39
for Time50
).
The ratio of distribution means and the mean of the ratio distribution are pretty close to each other in most cases,
but they are not equal.
See also: BenchmarkDotNet.Samples.IntroBenchmarkBaseline, BenchmarkDotNet.Samples.IntroRatioSD, Benchmark and Job Baselines.
- 4e64c9 Ratio/RatioSD columns (by @AndreyAkinshin)
Milestone details
In the v0.11.2 scope, 28 issues were resolved and 33 pull requests were merged. This release includes 84 commits by 20 contributors.
Resolved issues (28)
- #221 Investigate why CanEnableServerGcMode test fails for Core on appveyor
- #290 Question: Any official way to benchmark same method between different assembly versions?
- #447 Implement ColoredLogger for LinqPad
- #521 Support async Setup/Cleanup
- #544 Diff view for disassembler output (assignee: @WojciechNagorski)
- #560 Suggestion: markdown output for DisassemblyDiagnoser (assignee: @adamsitnik)
- #601 Surprising results
- #658 [Params] for enums should include all values by default
- #731 Add constant folding analyser
- #788 Detect correct version of .NET Core in Docket container
- #842 Benchmark filter: wildcards on *nix CLI (assignee: @adamsitnik)
- #858 Should the Engine iterate over and consume IEnumerable and IQueryable results? (assignee: @adamsitnik)
- #859 Strange max frequency values on Windows (assignee: @Rizzen)
- #862 Don't print parse errors to the output (assignee: @adamsitnik)
- #863 Make it easier to understand which process belongs to which benchmark (assignee: @adamsitnik)
- #864 Make the filter case insensitive (assignee: @adamsitnik)
- #874 .NET Core 3.0 support (assignee: @adamsitnik)
- #879 Benchmark attributed with "HardwareCounters" throws an exception (assignee: @adamsitnik)
- #880 Select Baseline across Methods and Jobs (assignee: @AndreyAkinshin)
- #889 ArgumentsSource doesn't work if method takes 1 arg (assignee: @adamsitnik)
- #891 Add docs about debugging BDN issues (assignee: @adamsitnik)
- #904 Implement
--info
- #905 Implement
--list
- #909 Improve CPU Brand Strings without frequency
- #911 Excluding specific namespaces from disassembly (assignee: @adamsitnik)
- #925 Make it possible to run the benchmark with multiple CoreRun.exe (assignee: @adamsitnik)
- #931 Same NuGet version used when benchmarking different packages
- #936 Producing the asm diff reports on demand
Merged pull requests (33)
- #860 Fix strange CPU Frequency values (by @Rizzen)
- #878 EtwProfiler Diagnoser (by @adamsitnik)
- #886 Enabled GcModeTests.CanEnableServerGcMode (by @dlemstra)
- #887 Dependencies update (by @adamsitnik)
- #888 Fix duplicate example in RunStrategy guide (by @SteveDesmond-ca)
- #890 RPlotExporter: use https to download dependencies (by @xavero)
- #892 Added support for async GlobalSetup. (by @dlemstra)
- #894 Fix GlobalCleanupAttributeTest.GlobalCleanupMethodRunsTest (by @dlemstra)
- #898 Add workaround for Full framework on *NIX (by @mfilippov)
- #900 Fixing aspnet/KestrelHttpServer url (by @facundofarias)
- #901 Fixing SignalR and EntityFrameworkCore url as well (by @facundofarias)
- #902 More command line args (by @adamsitnik)
- #903 Add LINQPad logging (by @bgrainger)
- #906 Zero measurement analyser (by @Rizzen)
- #907 fixes #904 Implement
--info
(by @lahma) - #908 Added [ParamsAllValues] (by @gsomix)
- #910 Simplify AMD Ryzen CPU brand info (by @lahma)
- #913 .NET Core Toolchains improvements (by @adamsitnik)
- #914 Implement
--list
- fixes #905 (by @WojciechNagorski) - #915 Use a monospaced font for LINQPad logging output (by @bgrainger)
- #916 Update console-args.md - add information about
--list
option (by @WojciechNagorski) - #917 Add Azure Pipelines support (by @Ky7m)
- #920 OCD Whitespace and tabs cleanup (by @dlemstra)
- #922 Enables benchmarking betweeen different Nuget packages (by @Shazwazza)
- #923 async GlobalCleanup support (by @dlemstra)
- #926 Added support for async GlobalCleanup. (by @dlemstra)
- #927 Improve Disassembly exporters and add PrettyGithubMarkdownDiffDisassemblyExporter (by @WojciechNagorski)
- #929 Add build status badges for Azure Pipelines (by @Ky7m)
- #930 Fix minor spelling issues and typos (by @KonH)
- #932 Partition benchmark run info based on added nuget packages (by @blairconrad)
- #934 Detect correct version of .NET Core in Docker (by @Rizzen)
- #935 Add Timeout for dotnet cli build commands to our toolchains (by @adamsitnik)
- #937 Producing the asm diff reports on demand - fix for #936 (by @WojciechNagorski)
Commits (84)
- 22b020 Postrelease update of v0.11.1 changelog (by @AndreyAkinshin)
- 3e26df docs: fix NuGet package lists in footers (v0.11.x) (by @AndreyAkinshin)
- cebe2a Deferred Execution Validator, fixes #858 (by @adamsitnik)
- 50fd57 exported json file should contain correct type name for generic types, not Ge... (by @adamsitnik)
- 30b885 benchmarked code can be defining IHost so we need to provide full name (examp... (by @adamsitnik)
- b7104e Don't print parse errors to the output, fixes #862 (by @adamsitnik)
- 3a21b4 Make it easier to understand which process belongs to which benchmark, fixes ... (by @adamsitnik)
- 99ea2d Fix behavior of Baseline property of Benchmark attribute in integration with ... (by @Caballero77)
- 2e398c detect .NET Core 3.0 and use the appropriate target framework moniker, fixes ... (by @adamsitnik)
- ff1214 Update IntroSetupCleanupTarget.md (#876) (by @fredeil)
- 1721b4 Fixed typo in the NodaTime name (#877) (by @YohDeadfall)
- f411a5 Fix typo in example code (#869) (by @NRKirby)
- 21a007 Support method-job baseline pairs, fixes #880 (by @AndreyAkinshin)
- a78b38 Fix strange CPU Frequency values (#860) (by @Rizzen)
- 60eca0 Threshold API for WelchTTest; Improve Student accuracy for small n (by @AndreyAkinshin)
- 05cc8d Statistical testing improvements (by @AndreyAkinshin)
- 557752 Fix compilation (by @AndreyAkinshin)
- a03307 Enabled GcModeTests.CanEnableServerGcMode (#886) fixes #221 (by @dlemstra)
- add585 Fix duplicate example in RunStrategy guide (#888) (by @SteveDesmond-ca)
- d8b008 Use NoInlining for CommonExporterApprovalTests (by @AndreyAkinshin)
- eacfd7 Dependencies update (#887) (by @adamsitnik)
- 579986 improve the docs, explain how to use ArgumentsSource for single arugment, fix... (by @adamsitnik)
- 1ceee3 Fix compilation after merge (by @AndreyAkinshin)
- 9ff772 RPlotExporter: use https to download dependencies (#890) (by @xavero)
- 41d6b8 added xml docs, made some methods virtual/public to make it easier to write y... (by @adamsitnik)
- cd0791 restore --no-dependencies was good when we were generating multiple projects,... (by @adamsitnik)
- ad1feb expose KeepBenchmarkFiles as --keepFiles command line argument, #891 (by @adamsitnik)
- 6880b5 add DebugInProcessConfig and DebugBuildConfig to make troubleshooting easier,... (by @adamsitnik)
- 12e01a add Troubleshooting docs, fixes #891 (by @adamsitnik)
- 106777 make the filter case insensitive invariant culture, fixes #864 (by @adamsitnik)
- 1b8051 wrap * in '*' on Unix when showing users the help, fixes #842 (by @adamsitnik)
- 382a4a Fix GlobalCleanupAttributeTest.GlobalCleanupMethodRunsTest (#894) (by @dlemstra)
- 0f721c make it possible to specify runtimes using explicit tfms like net472 or netco... (by @adamsitnik)
- 1e3df7 make it possible to specify hardware counters from command line (by @adamsitnik)
- ba0d22 allow to configure the number of invocations and iterations from command line (by @adamsitnik)
- b90be6 Add workaround for Full framework on *NIX (#898) (by @mfilippov)
- 4afdb8 Fixing aspnet/KestrelHttpServer url (#900) (by @facundofarias)
- 3319ab Fixing SignalR and EntityFrameworkCore url as well (#901) (by @facundofarias)
- b72aab allow the users to specify programmatically custom default job settings and o... (by @adamsitnik)
- 2e7042 Merge pull request #902 from dotnet/moreCommandLineArgs (by @adamsitnik)
- 04a715 EtwProfiler Diagnoser (#878) (by @adamsitnik)
- 220bae DotNetCliGenerator.TargetFrameworkMoniker must be public (by @adamsitnik)
- 4e64c9 Ratio/RatioSD columns (by @AndreyAkinshin)
- 177c07 Add Windows 10 (1809) in OsBrandStringHelper (by @AndreyAkinshin)
- 4be28d fixes #904 Implement
--info
(#907) (by @lahma) - c3b609 Add LINQPad logging (#903) (by @bgrainger)
- 922dff Added [ParamsAllValues] (#908), fixes #658 (by @gsomix)
- 1e6235 github markdown exporter for Disassembler, fixes #560 (by @adamsitnik)
- 330f66 Implement
--list
- fixes #905 (#914) (by @WojciechNagorski) - 10fdd0 Use a monospaced font for LINQPad logging output. (#915) (by @bgrainger)
- 846d08 ParamsAllValuesValidator fixes (by @AndreyAkinshin)
- 1c581e .NET Core Toolchains improvements (#913) (by @adamsitnik)
- 8949df BenchmarkSwitcher should ask the user for choosing the benchmarks when the gl... (by @adamsitnik)
- fb8f89 Make WindowsDisassembler public to allow for late resutls filtering in diagno... (by @adamsitnik)
- 0bcbce allow configuring disasm recursive depth from console line arguments; --todo; (by @adamsitnik)
- 5e3cee make sure BenchmarkSwitcher handles all possible cases and gives nice errors (by @adamsitnik)
- 6c7521 Update console-args.md - add information about
--list
option (#916) (by @WojciechNagorski) - 8773ff when user provides categories via command line to benchmark switcher we don't... (by @adamsitnik)
- 901616 when user provides CoreRun path and runtime in explicit way, we should use th... (by @adamsitnik)
- 5df1e6 Simplify AMD Ryzen CPU brand info (#910) (by @lahma)
- 1b4c7f OCD Whitespace and tabs cleanup (#920) (by @dlemstra)
- d917e6 don't parse the trace file if there are no counters configured, wait for dela... (by @adamsitnik)
- e0f7a6 Added support for async GlobalSetup. (#892) (by @dlemstra)
- 46bebf allow the users to run the same benchmarks using few different CoreRun.exe, f... (by @adamsitnik)
- a4f91a better handling of edge cases for parsing hardware counters from the console ... (by @adamsitnik)
- 98925b initial 0.11.2 release notes (by @adamsitnik)
- a971a4 async GlobalCleanup support (#923) (by @dlemstra)
- e4c7b8 Added support for async GlobalCleanup. (#926), fixes #521 (by @dlemstra)
- 92a786 Enables benchmarking betweeen different Nuget packages (#922) fixes #290 (by @Shazwazza)
- 601c66 Add Azure Pipelines support (#917) (by @Ky7m)
- f9ac68 Add build status badges (#929) (by @Ky7m)
- 8a2eec Fix minor spelling issues and typos (#930) (by @KonH)
- 510685 Partition benchmark run info based on added nuget packages (#932) (by @blairconrad)
- 1903a1 Improve Disassembly exporters and add PrettyGithubMarkdownDiffDisassemblyExpo... (by @WojciechNagorski)
- 48d193 Zero measurement analyser (#906) (by @Rizzen)
- cf84a4 NuGet casing fix (by @AndreyAkinshin)
- fd459f Remove remark about prerelease version in etwprofiler.md (by @AndreyAkinshin)
- db444c Add Timeout for dotnet cli build commands to our toolchains (#935) fixes #933 (by @adamsitnik)
- bb0b18 Detect correct version of .NET Core in Docker (#934), fixes #788 (by @Rizzen)
- dd103b Producing the asm diff reports on demand - fixes #936 (#937) (by @WojciechNagorski)
- 864400 Update v0.11.2 changelog (by @AndreyAkinshin)
- 15c035 Minor IntroSamples fixes (by @AndreyAkinshin)
- a5b692 Update v0.11.2 changelog (by @AndreyAkinshin)
- 2341c7 Set library version: 0.11.2 (by @AndreyAkinshin)
Contributors (20)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Blair Conrad (@blairconrad)
- Bradley Grainger (@bgrainger)
- Caballero77 (@Caballero77)
- Dirk Lemstra (@dlemstra)
- Evgeniy Andreev (@gsomix)
- Facundo Farias (@facundofarias)
- Flavio Coelho (@xavero)
- Fredrik Eilertsen (@fredeil)
- Igor Fesenko (@Ky7m)
- KonH (@KonH)
- Mark Tkachenko (@Rizzen)
- Marko Lahma (@lahma)
- Mikhail Filippov (@mfilippov)
- Nick Kirby (@NRKirby)
- Shannon Deminick (@Shazwazza)
- Steve Desmond (@SteveDesmond-ca)
- Wojciech Nagórski (@WojciechNagorski)
- Yoh Deadfall (@YohDeadfall)
Thank you very much!
Additional details
Date: November 1, 2018
Milestone: v0.11.2 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.11.2
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.11.2
BenchmarkDotNet v0.11.1
This release includes some minor improvements and bug fixes:
- Fixed
RPlotExporter
(#852, #855). In v0.11.0, the plot generation was broken because of the huge renaming in #787. - ArgumentsSource now supports additional types like
Type
(#840),BigInteger
(#850),DateTime
(#853), and special double values likedouble.NaN
(#851) - Generated projects ignore Directory.Build.props and Directory.Build.targets files #854
- Now it's possible to run benchmarks with CoreRun (de152c, #857)
Milestone details
In the v0.11.1 scope, 7 issues were resolved and 2 pull requests were merged. This release includes 29 commits by 4 contributors.
Resolved issues (7)
- #840 ArgumentsSource doesn't work with System.RuntimeType (assignee: @AndreyAkinshin)
- #850 Handle BigIntegers arguments properly (assignee: @adamsitnik)
- #851 Handle double special values like NaN etc (assignee: @adamsitnik)
- #852 BuildPlots script generates empty pictures (assignee: @AndreyAkinshin)
- #853 ArgumentsSource containing IFormattable leads to Compile Exceptions (assignee: @adamsitnik)
- #855 Empty plot (assignee: @AndreyAkinshin)
- #857 Improve user experience for working with local CoreFX builds (assignee: @adamsitnik)
Merged pull requests (2)
- #839 Small Typo in changelog (by @Tornhoof)
- #854 Exclude Directory.Build.props/targets from generated csproj files (by @agocke)
Commits (29)
- c37aa8 Postrelease update of v0.11.0 changelog (by @AndreyAkinshin)
- b7f7fc Handle private types in GetCorrectCSharpTypeName, fixes #840 (by @AndreyAkinshin)
- 522158 Handle private types in GetCorrectCSharpTypeName (part 2), fixes #840 (by @AndreyAkinshin)
- 64acde small typo (#839) (by @Tornhoof)
- 521c22 Add travis_wait for build.sh (by @AndreyAkinshin)
- a8a0da Update BenchmarkDotNet.sln.DotSettings (by @AndreyAkinshin)
- 9ab58a Introduce BenchmarkDotNet.Samples.csproj.DotSettings (by @AndreyAkinshin)
- 3ce9fe BenchmarkDotNet.Samples Cleanup (by @AndreyAkinshin)
- a04a23 Cleanup: spelling issues in BenchmarkDotNet (by @AndreyAkinshin)
- c37784 Cleanup: code style issues in BenchmarkDotNet (by @AndreyAkinshin)
- 5f8452 Cleanup: Redundancies in Code issues in BenchmarkDotNet (by @AndreyAkinshin)
- a76f43 Cleanup: Common Practices and Code Improvements in BenchmarkDotNet (by @AndreyAkinshin)
- 2d0629 Cleanup: Redundancies in Symbol Declarations Issues in BenchmarkDotNet (by @AndreyAkinshin)
- 5a7689 Cleanup: Constraints Violations Issues in BenchmarkDotNet (by @AndreyAkinshin)
- 02df24 Cleanup: Language Usage Opportunities in BenchmarkDotNet (by @AndreyAkinshin)
- 93ed39 Cleanup: Potential Code Quality Issues in BenchmarkDotNet (by @AndreyAkinshin)
- 538f56 Cleanup: more issues in BenchmarkDotNet (by @AndreyAkinshin)
- 559773 Cleanup: more issues in BenchmarkDotNet (by @AndreyAkinshin)
- 29471e add support for BigIntegers + include namespace of the arugments, fixes #850 (by @adamsitnik)
- 2aff9f Handle double and float special values like NaN, PositiveInfinity etc, fixes ... (by @adamsitnik)
- 1a68ed properties of SummaryStyle must have public setter (by @adamsitnik)
- 5cfb5b support DateTimes for [Arguments/Params Source], fixes #853 (by @adamsitnik)
- 2be698 Fix RPlots, fixes #852 (by @AndreyAkinshin)
- 7ee3cf Exclude Directory.Build.props/targets from generated csproj files (by @agocke)
- 20e901 Merge pull request #854 from agocke/fix-csproj-template (by @adamsitnik)
- de152c allow the users to run benchmarks with CoreRun, #857 (by @adamsitnik)
- f00ac0 Increase travis timeout (by @AndreyAkinshin)
- 071e58 docs: add changelog for v0.11.1 (by @AndreyAkinshin)
- c5e586 Set library version: 0.11.1 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Andy Gocke (@agocke)
- Stefan (@Tornhoof)
Thank you very much!
Additional details
Date: August 22, 2018
Milestone: v0.11.1 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.11.1
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.11.1
BenchmarkDotNet v0.11.0
This is one of the biggest releases of BenchmarkDotNet ever. There are so many improvements. We have new documentation, many performance improvements, Job Mutators, better user experience, correct Ctrl+C handling, better generic benchmarks support, more scenarios for passing arguments to benchmarks, awesome support of console arguments, unicode support, LLVM support in MonoDisassembler, and many-many other improvements and bug fixes!
A big part of the features and bug fixes were implemented to meet the enterprise requirements of Microsoft to make it possible to port CoreCLR, CoreFX, and CoreFXLab to BenchmarkDotNet.
The release would not be possible without many contributions from amazing community members. This release is a combined effort. We build BenchmarkDotNet together to make benchmarking .NET code easy and available to everyone for free!
New documentation
We have many improvements in our documentation! The new docs include:
- DocFX under the hood
- Detailed changelogs which includes all commits, merged pull requests and resolved issues
- API references
- Code samples for main features:
we generate it automatically based on the
BenchmarkDotNet.Samples
project; it means that all samples can always be compiled (no more samples with outdated API) - Better UI
- Documentation versioning: now it's possible to look at the documentation for recent BenchmarkDotNet versions
Performance improvements
BenchmarkDotNet needs to be capable of running few thousands of CoreFX and CoreCLR benchmarks in an acceptable amount of time. The code itself was already optimized so we needed architectural and design changes to meet this requirement.
Generate one executable per runtime settings
To ensure that the side effects of one benchmark run does not affect another benchmark run BenchmarkDotNet generates, builds and runs every benchmark in a dedicated process. So far we were generating and building one executable per benchmark, now we generate and build one executable per runtime settings. So if you want to run ten thousands of benchmarks for .NET Core 2.1 we are going to generate and build single executable, not ten thousand. If you target multiple runtimes the build is going to be executed in parallel. Moreover, if one of the parallel builds fail it's going to be repeated in a sequential way.
Previously the time to generate and build 650 benchmarks from our Samples project was one hour. Now it's something around 13 seconds which means 276 X improvement for this particular scenario. You can see the changes here.
Don't execute long operations more than once per iteration
BenchmarkDotNet was designed to allow for very accurate and stable micro-benchmarking. One of the techniques that we use is manual loop unrolling. In practice, it meant that for every iteration we were executing the benchmark at least 16 times (the default UnrollFactor
value). It was of course not desired for the very time-consuming benchmarks.
So far this feature was always enabled by default and users would need to configure UnrollFactor=1
to disable it. Now BenchmarkDotNet is going to discover such scenario and don't perform manual loop unrolling for the very time-consuming benchmarks. BenchmarkDotNet uses Job.IterationTime
setting (the default is 0.5s) in the Pilot Experiment stage to determine how many times given benchmark should be executed per iteration.
Example:
public class Program
{
static void Main() => BenchmarkRunner.Run<Program>();
[Benchmark]
public void Sleep1s() => Thread.Sleep(TimeSpan.FromSeconds(1));
}
Time to run with the previous version: 374 seconds. With 0.11.0
it's 27 seconds which gives us almost 14 X improvement. A good example of benchmarks that are going to benefit from this change are computer game benchmarks and ML.NET benchmarks. You can see the changes here and here.
Exposing more configuration settings
The default settings were configured to work well with every scenario. Before running the benchmark, BenchmarkDotNet does not know anything about it. This is why it performs many warmup iterations before running the benchmarks.
When you author benchmarks and run them many times you can come up with custom settings that produce similar results but in a shorter manner of time. To allow you to do that we have exposed:
Job.MinIterationCount
(default value is 15)Job.MaxIterationCount
(default value is 100)Job.MinWarmupIterationCount
(default value is 6)Job.MaxWarmupIterationCount
(default value is 50)
User Experience
One of the biggest success factors of BenchmarkDotNet is a great user experience. The tool just works as expected and makes your life easy. We want to make it even better!
.NET Standard 2.0
We have ported BenchmarkDotNet to .NET Standard 2.0 and thanks to that we were able to not only simplify our code and build process but also merge BenchmarkDotNet.Core.dll
and BenchmarkDotNet.Toolchains.Roslyn.dll
into BenchmarkDotNet.dll
. We still support .NET 4.6 but we have dropped .NET Core 1.1 support. More information and full discussion can be found here.
Note: Our BenchmarkDotNet.Diagnostics.Windows
package which uses EventTrace
to implement ETW-based diagnosers was also ported to .NET Standard 2.0 and you can now use all the ETW diagnosers with .NET Core on Windows. We plan to add EventPipe support and make this page fully cross-platform and Unix compatible soon.
Using complex types as benchmark arguments
So far we have required the users to implement IParam
interface to make the custom complex types work as benchmark arguments/parameters. This has changed, now the users can use any complex types as arguments and it will just work (more).
public class Program
{
static void Main(string[] args) => BenchmarkRunner.Run<Program>();
public IEnumerable<object> Arguments()
{
yield return new Point2D(10, 200);
}
[Benchmark]
[ArgumentsSource(nameof(Arguments))]
public int WithArgument(Point2D point) => point.X + point.Y;
}
public class Point2D
{
public int X, Y;
public Point2D(int x, int y)
{
X = x;
Y = y;
}
public override string ToString() => $"[{X},{Y}]";
}
Note: If you want to control what will be displayed in the summary you should override ToString
.
If IterationSetup is provided run benchmark once per iteration
When Stephen Toub says that something is buggy, it most probably is. BenchmarkDotNet performs multiple invocations of benchmark per every iteration. When we have exposed the [IterationSetup]
attribute many users were expecting that the IterationSetup
is going to be invoked before every benchmark execution.
It was invoked before every iteration, and iteration was more than one benchmark call if the user did not configure that explicitly. We have changed that and now if you provide an [IterationSetup]
method it is going to be executed before every iteration and iteration will invoke the benchmark just once.
public class Test
{
public static void Main() => BenchmarkRunner.Run<Test>();
[IterationSetup]
public void MySetup() => Console.WriteLine("MySetup");
[Benchmark]
public void MyBenchmark() => Console.WriteLine("MyBenchmark");
}
Before:
MySetup
MyBenchmark
MyBenchmark
MyBenchmark
MyBenchmark
(...)
After:
MySetup
MyBenchmark
MySetup
MyBenchmark
MySetup
MyBenchmark
(...)
Note: If you want to configure how many times benchmark should be invoked per iteration you can use the new [InvocationCountAttribute]
.
Job Mutators
Job
represents a set of settings to run the benchmarks. We run every benchmark for every job defined by the user. The problem was that so far many jobs were just added to the config instead of being merged with other jobs.
An example:
[ClrJob, CoreJob]
[GcServer(true)]
public class MyBenchmarkClass
Resulted in 3 jobs and 3 benchmark executions: ClrJob
, CoreJob
and GcServer(true)
for current runtime.
Now all Jobs and their corresponding attributes marked as mutators are going to be applied to other jobs, not just added to the config. So in this particular scenario, the benchmarks from MyBenchmarkClass
are going to be executed for .NET with Server GC enabled and .NET Core with Server GC enabled.
Mutators are great when you want to have a single, global config for all benchmarks and apply given settings only to selected types. You can find out more about mutators here.
Ctrl+C
When the user:
- presses
Ctrl+C
- presses
Ctrl+Break
- logs off
- closes console window
We are now going to close any existing ETW session created by BenchmarkDotNet and restore console colors (read more).
Handle OutOfMemoryException more gracefully
When our benchmark hits OutOfMemoryException
we print some nice explanation:
public class Program
{
static void Main(string[] args) => BenchmarkRunner.Run<Program>();
private List<object> list = new List<object>();
[Benchmark]
public void AntiPattern() => list.Add(new int[int.MaxValue / 2]);
}
OutOfMemoryException!
BenchmarkDotNet continues to run additional iterations until desired accuracy level is achieved. It's possible only if the benchmark method doesn't have any side-effects.
If your benchmark allocates memory and keeps it alive, you are creating a memory leak.
You should redesign your benchmark and remove the side-effects. You can use `OperationsPerInvoke`, `IterationSetup` and `IterationCleanup` to do that.
Trimming long strings
We used to display the values "as is" which was bad for long strings. Now the values are trimmed (more).
public class Long
{
[Params("text/plain,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7")]
public string Text;
[Benchmark]
public int HashCode() => Text.GetHashCode();
}
Method | Text |
---|---|
HashCode | text/(...)q=0.7 [86] |
More features
Generic benchmarks
BenchmarkDotNet supports generic benchmarks, all you need to do is to tell it which types should be used as generic arguments (read more).
[GenericTypeArguments(typeof(int))]
[GenericTypeArguments(typeof(char))]
public class IntroGenericTypeArguments<T>
{
[Benchmark] public T Create() => Activator.CreateInstance<T>();
}
Arguments
We now support more scenarios for passing arguments to benchmarks:
- passing arguments to asynchronous benchmarks (more)
- passing generic types
- passing arguments by reference
- passing jagged arrays (more)
- types with implicit cast operator to stack only types can be passed as given stack-only types to Benchmarks (more)
Example:
public class WithStringToReadOnlySpan
{
[Benchmark]
[Arguments("some string")]
public void AcceptsReadOnlySpan(ReadOnlySpan<char> notString)
}
Console Arguments
BenchmarkSwitcher
supports various console arguments (PR), to make it work you need to pass the args
to switcher:
class Program
{
static void Main(string[] args)
=> BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
}
Note: to get the most up-to-date info about supported console arguments run the benchmarks with --help
.
Filter
The --filter
or just -f
allows you to filter the benchmarks by their full name (namespace.typeName.methodName
) using glob patterns.
Examples:
- Run all benchmarks from System.Memory namespace:
-f System.Memory*
- Run all benchmarks:
-f *
- Run all benchmarks from ClassA and ClassB
-f *ClassA* *ClassB*
Note: If you would like to join all the results into a single summary, you need to use --join
.
Categories
You can also filter the benchmarks by categories:
--anyCategories
- runs all benchmarks that belong to any of the provided categories--allCategories
- runs all benchmarks that belong to all provided categories
Diagnosers
-m
,--memory
- enables MemoryDiagnoser and prints memory statistics-d
,--disassm
- enables DisassemblyDiagnoser and exports diassembly of benchmarked code
Runtimes
The --runtimes
or just -r
allows you to run the benchmarks for selected Runtimes. Available options are: Clr, Mono, Core and CoreRT.
Example: run the benchmarks for .NET and .NET Core:
dotnet run -c Release -- --runtimes clr core
More arguments
-j
,--job
(Default: Default) Dry/Short/Medium/Long or Default-e
,--exporters
GitHub/StackOverflow/RPlot/CSV/JSON/HTML/XML-i
,--inProcess
(Default: false) Run benchmarks in Process-a
,--artifacts
Valid path to accessible directory--outliers
(Default: OnlyUpper) None/OnlyUpper/OnlyLower/All--affinity
Affinity mask to set for the benchmark process--allStats
(Default: false) Displays all statistics (min, max & more)--attribute
Run all methods with given attribute (applied to class or method)
Other small improvements
- Unicode support:
now you can enable support of Unicode symbols like
μ
or±
with[EncodingAttribute.Unicode]
, an example: BenchmarkDotNet.Samples.IntroEncoding (see #735) - Better benchmark validation (see #693, #737)
- Improve .NET Framework version detection: now we support .NET Framework 4.7.2 (see #743)
- OutlierModes: now it's possible to control how to process outliers, an example BenchmarkDotNet.Samples.IntroOutliers (see #766)
- LLVM support in MonoDisassembler (see a7426e)
- Grand API renaming we try not to change public API, but sometimes it's necessary because we want to get a consistent and understandable API in v1.0.0. (see #787)
- Many-many small improvements and bug fixes
Milestone details
In the v0.11.0 scope, 65 issues were resolved and 34 pull requests were merged. This release includes 214 commits by 11 contributors.
Resolved issues (65)
- #136 Fastcheck for correctness of benchmark implementations
- #175 Add .NET Core support for Diagnostics package (assignee: @adamsitnik)
- #368 Memory leak and crash with [Setup] (assignee: @adamsitnik)
- #420 Make BenchmarkDotNet.Core runtime independent (assignee: @adamsitnik)
- #464 Iteration setup / cleanup should not be called for Idle() (assignee: @adamsitnik)
- #484 Broken HTTPS on site (assignee: @jongalloway)
- #487 Please consider using 'µs' instead of 'us'
- #551 List of structs and OutOfMemoryException
- #583 BenchmarkDotNet.Samples refactoring (assignee: @AndreyAkinshin)
- #586 IParam interface improvement (assignee: @adamsitnik)
- #638 Config with ryujit but it doesnt actually use ryujit? (assignee: @morgan-kn)
- #649 Searching docs leads to 404 page (assignee: @AndreyAkinshin)
- #665 Handle OutOfMemoryException more gracefully (assignee: @adamsitnik)
- #671 Why does BenchmarkRunner generate an isolated project per each benchmark method/job/params? (assignee: @adamsitnik)
- #698 Port to .NET Standard 2.0, drop .NET Core 1.1 support (assignee: @adamsitnik)
- #699 Generate one executable per runtime settings (assignee: @adamsitnik)
- #700 Improve local CoreCLR support (assignee: @adamsitnik)
- #701 Extend exported json file with FullName using xunit naming convention for integration purpose (assignee: @adamsitnik)
- #710 Use DocFX as a documentation generator (assignee: @AndreyAkinshin)
- #712 [Params] with arrays as params throws System.Reflection.TargetInvocationException (assignee: @adamsitnik)
- #713 How to specify the invocation/launch count per type when using Config for multiple runtimes? (assignee: @adamsitnik)
- #718 CoreRT support (assignee: @adamsitnik)
- #719 If fail to build in Parallel due to file access issues, try to build sequentially (assignee: @adamsitnik)
- #720 Add SummaryOrderPolicy.Declared
- #724 Allocated Memory results are not scaled with OperationPerInvoke (assignee: @adamsitnik)
- #726 Improve building guideline
- #729 Handle Ctrl+C/Break (assignee: @adamsitnik)
- #730 IterationSetup is not running before each benchmark invocation (assignee: @adamsitnik)
- #733 IOException when running in OneDrive Folder (assignee: @adamsitnik)
- #734 Handle missing Mono runtime more gracefully (assignee: @adamsitnik)
- #736 Reduce number of initial pilot ops to 1 or make it configurable (assignee: @adamsitnik)
- #738 Params string containing characters like quotes is not being escaped properly (assignee: @adamsitnik)
- #741 Give users nice warning when T in generic benchmark is not public
- #745 It should be possible to specify the generic arguments by using attributes
- #747 Better docs that explain what is target/launch/iteration/invocation count (assignee: @adamsitnik)
- #748 Very long string params/arguments should be trimmed (assignee: @adamsitnik)
- #749 WithId(…) is ignored unless it’s at the end of the fluent calls chain. (assignee: @adamsitnik)
- #763 Make MaxIterationCount configurable, keep current value as default (assignee: @adamsitnik)
- #765 Add .NET Core 2.2 support (assignee: @adamsitnik)
- #769 ArgumentsSource does not support Jagged Arrays (assignee: @adamsitnik)
- #774 Make it possible to use Span and other ByRefLike types with implicit cast operators as benchmark argument (assignee: @adamsitnik)
- #778 CS0104: 'Job' is an ambiguous reference between 'BenchmarkDotNet.Jobs.Job' and 'Nest.Job' (assignee: @adamsitnik)
- #779 StackOnlyTypesWithImplicitCastOperatorAreSupportedAsArguments doesn't work on .NET Core 2.0 (assignee: @adamsitnik)
- #787 Grand renaming
- #793 job=core for BenchmarkSwitcher (assignee: @adamsitnik)
- #794 Don't exclude allocation quantum side effects for .NET Core 2.0+ (assignee: @adamsitnik)
- #795 Broken BenchmarkSwitcher (assignee: @adamsitnik)
- #797 Allocated is not divided by OperationsPerInvoke (assignee: @adamsitnik)
- #802 AdaptiveHistogramBuilder.BuildWithFixedBinSize error when running benchmarks (assignee: @AndreyAkinshin)
- #804 What is the point of BuildScriptFilePath ? (assignee: @adamsitnik)
- #809 Make it possible to configure Min and Max Warmup Iteration Count (assignee: @adamsitnik)
- #810 handle new *Ansi events to make Inlining and TailCall Diagnosers work with .NET Core 2.2 (assignee: @adamsitnik)
- #811 Question/Suggestion is GcStats forcing a GC.Collect when it doesn't need to (assignee: @adamsitnik)
- #812 When will the next release be available on NuGet? (assignee: @adamsitnik)
- #813 Problems with MemoryDiagnoserTests on Mono and .NET Core 2.0 (assignee: @adamsitnik)
- #814 For type arguments we should display simple, not-trimmed name (assignee: @adamsitnik)
- #816 BenchmarkDotNet.Autogenerated.csproj is not working on .NET Core 2.1 (assignee: @adamsitnik)
- #817 Autogenerated project is missing dependencies (assignee: @adamsitnik)
- #818 Arguments should be passed to asynchronous benchmarks (assignee: @adamsitnik)
- #820 set DOTNET_MULTILEVEL_LOOKUP=0 when custom dotnet cli path is provided (assignee: @adamsitnik)
- #821 ArgumentsAttribute causes an error when used with a string containing quotes (assignee: @adamsitnik)
- #823 Allow to set multiple Setup/Cleanup targets without string concatenation (assignee: @adamsitnik)
- #827 An easy way to run a specific benchmark class via command line (assignee: @adamsitnik)
- #829 Error message for wrong command line filter (assignee: @adamsitnik)
- #832 Compilation Error CS0119 with ParamsSource (assignee: @adamsitnik)
Merged pull requests (34)
- #693 Jit runtime validation (by @morgan-kn)
- #717 V11 (by @adamsitnik)
- #725 Extend exported json file with FullName using xunit naming convention for integration purpose (by @adamsitnik)
- #727 Building guideline improvement (by @Rizzen)
- #728 BenchmarkReport Exporter (by @Rizzen)
- #735 Unicode support (by @Rizzen)
- #737 Return value validator (by @ltrzesniewski)
- #740 Follow up to #737 (by @ltrzesniewski)
- #742 Add .NET Framework 4.7.2 version constant (by @epeshk)
- #743 Improve .NET Framework version detection (by @epeshk)
- #744 BenchmarkClass Validator (by @Rizzen)
- #746 Addition to #743: use HasValue instead of casting (by @epeshk)
- #750 Addition to #744: Using single variable in test instead of two (by @Rizzen)
- #752 Update HowItWorks.md (by @Tornhoof)
- #753 Ability to pass multiple assemblies. (by @paulness)
- #754 generate IParams for users in smart way (by @adamsitnik)
- #757 Add SummaryOrderPolicy.Defined to return benchmarks as instantiated (by @afmorris)
- #758 Generic Benchmark Attribute (by @Rizzen)
- #760 don't execute long operations more than once per iteration (by @adamsitnik)
- #761 stop the ETW session on Ctrl+C + restore console colors ;), fixes #729 (by @adamsitnik)
- #764 if IterationSetup is provided, and InvocationCount and UnrollFactor are not, run benchmark once per iteration to avoid user confusion (by @adamsitnik)
- #766 Introduce OutlierMode (by @AndreyAkinshin)
- #771 have two main actions: with unroll and without, for no unroll icrease the step by 1 in pilot (not *2) (by @adamsitnik)
- #781 Initial DocFX support, fixes #710 (by @AndreyAkinshin)
- #783 BenchmarkDotNet.Samples refactoring, fixes #583 (by @AndreyAkinshin)
- #785 Improve filtering from console args (by @adamsitnik)
- #789 docs: add changelog (by @AndreyAkinshin)
- #790 add link to inprocesstoolchain (by @IanKemp)
- #796 docs: multiversion combobox (by @AndreyAkinshin)
- #799 Cpu info improvement (by @Rizzen)
- #800 job Mutators (by @adamsitnik)
- #824 Use 3rd party lib for console args parsing + support globs for filtering (by @adamsitnik)
- #830 Read StandardOutput in a smart way to avoid infinite loops (by @houseofcat)
- #833 initial release notes (by @adamsitnik)
Commits (214)
- defa7e port to .NET Standard 2.0 (by @adamsitnik)
- 626b03 keep .NET 4.6 in case somebody is on full framework, but not using .NET Standard (by @adamsitnik)
- ae4e22 merge BenchmarkDotNet.Toolchains.Roslyn into BenchmarkDotNet.Core (by @adamsitnik)
- 260704 update TraceEvent, port BenchmarkDotNet.Diagnostics.Windows to .NET Standard,... (by @adamsitnik)
- 324973 remove .NET Core 1.1 support, update tests (by @adamsitnik)
- 64d732 get it working (by @adamsitnik)
- 54b829 remove .NET Core 1.1 from the CI jobs (by @adamsitnik)
- ebf3d9 ups ;) (by @adamsitnik)
- 42d9ae Merge branch 'master' into annotations (by @adamsitnik)
- bc9975 cleanup (by @adamsitnik)
- 96dd4f merge BenchmarkDotNet and BenchmarkDotNet.Core (by @adamsitnik)
- 2dc21b group the benchmarks by runtime settings into partitions, #699 (by @adamsitnik)
- fbb283 generate one .cs with all types inside, #699 (by @adamsitnik)
- 334af2 build single exe, #699 (by @adamsitnik)
- b958a1 run selected type from all types in exe #699 (by @adamsitnik)
- 4f5714 polishing the code, #699 (by @adamsitnik)
- 0c26a4 reverting some magic .sln change which has most probably broken the Travis bu... (by @adamsitnik)
- c8a368 restore to a dedicated temp folder, rebuild only bare minumum, store everythi... (by @adamsitnik)
- bd04bd better debugging experience (#699): when building only 1 thing at a time, pri... (by @adamsitnik)
- fcf691 Improved local CoreCLR/CoreFX support, tested on all OSes #700, #702 (by @adamsitnik)
- 7fbd6c allow the users to define an extra nuget feed, don't force clear tag for loca... (by @adamsitnik)
- ad0fc8 Merge branch 'master' into v11 (by @adamsitnik)
- 8070e4 Merge remote-tracking branch 'origin/master' into v11 (by @adamsitnik)
- 0cccba post code review fixes, part of #175 (by @adamsitnik)
- 4acc15 new Runtime and Toolchain for CoreRT, #718 (by @adamsitnik)
- 657f05 don't use Expressions in Engine to avoid .NET Native compiler errors, #718 (by @adamsitnik)
- 8c93cf the .NET Native compiler complained about some dependencies from referenced p... (by @adamsitnik)
- c8ba5c If fail to build in Parallel due to file access issues, try to build sequenti... (by @adamsitnik)
- 7173f7 CoreRT does not support reflection yet, so we need to target .NET Core 2.1 to... (by @adamsitnik)
- 889270 trying to install Clang 3.9 for CoreRT tests purpose, #718 (by @adamsitnik)
- 967167 code review fixes, #718 (by @adamsitnik)
- 94863a Merge pull request #717 from dotnet/v11 (by @adamsitnik)
- 448752 Improved docs for Disassembly Diagnoser (by @adamsitnik)
- 600e5f add FromAssemblyAndTypes method to make it possible to auto-detect all benchm... (by @adamsitnik)
- 289292 Allocated Memory must be scaled with OperationPerInvoke, fixes #724 (by @adamsitnik)
- 1aa414 Actual Building Guide (by @Rizzen)
- cfd9fa Merge pull request #727 from Rizzen/master (by @adamsitnik)
- 7cfe09 Created Exporter and moved logic into (by @Rizzen)
- b9ff75 Merge pull request #728 from Rizzen/BenchmarkReportExporter (by @adamsitnik)
- adea8f support by ref Arguments (by @adamsitnik)
- 0ecd7e ignore auto-generated files cleanup errors, #733 (by @adamsitnik)
- cf5cd6 Handle missing Mono runtime more gracefully, fixes #734 (by @adamsitnik)
- 49495f Remove unused usings (by @AndreyAkinshin)
- 160516 Return value validator (#737), fixes #136 (by @ltrzesniewski)
- 396f0a Follow up to #737 (#740) (by @ltrzesniewski)
- 9dc4e8 Add .NET Framework 4.7.2 release number constant to GetCurrentVersionBasedOnW... (by @epeshk)
- 06ff2d Update link to manual with .NET Framework version constants (by @epeshk)
- f7d9ac Don't check Reference Assemblies folder existence for .NET Framework version ... (by @epeshk)
- ebc1f6 Remove hardcoded Program Files directory location (by @epeshk)
- 490304 Refactor framework version determining, extract logic from CsProjClassicNetTo... (by @epeshk)
- cbea7e Fix Program Files path on x86 systems (by @epeshk)
- 8071c8 ProgramFilesX86DirectoryPath field (by @epeshk)
- f1d726 Merge pull request #743 from epeshk/frameworkVersion (by @AndreyAkinshin)
- a36442 use HasValue instead of casting (by @epeshk)
- c7efcc Merge pull request #746 from epeshk/frameworkVersion (by @adamsitnik)
- 58f704 Give users nice warning when T in generic benchmark is not public, fixes #741 (by @Rizzen)
- 66f958 when dotnet build --no-restore fails, try to run with restore (by @adamsitnik)
- 52067c custom job Id should be preserved, fixes #749 (by @adamsitnik)
- 24ec6e Very long string params/arguments should be trimmed, fixes #748 (by @adamsitnik)
- b2e5b6 Params string containing characters like quotes is must be escaped properly, ... (by @adamsitnik)
- 10865c Better docs that explain what is target/launch/iteration/invocation count by ... (by @adamsitnik)
- 32ed86 Addition to #744: Using single variable instead of two (by @Rizzen)
- f2a71f Merge pull request #750 from Rizzen/744_addition (by @adamsitnik)
- eabfdd Update HowItWorks.md (by @Tornhoof)
- 8fc754 Merge pull request #752 from Tornhoof/patch-1 (by @adamsitnik)
- 2d79b6 Ability to pass multiple assemblies. (by @paulness)
- ba07b0 Merge pull request #753 from paulness/feature-allow-multiple-assemblies-to-be... (by @adamsitnik)
- d1b037 generate IParams for users in smart way (by @adamsitnik)
- 4665ec Merge pull request #754 from dotnet/noIParam (by @adamsitnik)
- 02c7c0 Generic Benchmark Attribute (#758), fixes #745 (by @Rizzen)
- 7caf28 Add SummaryOrderPolicy.Defined to return benchmarks as instantiated (#757), f... (by @afmorris)
- 449002 renamed Defined to Declared to keep consistency, renamed GenericBenchmark to ... (by @adamsitnik)
- 8855a2 Jit runtime validation (#693) (by @morgan-kn)
- 41614b stop the ETW session on Ctrl+C + restore console colors ;), fixes #729 (#761) (by @adamsitnik)
- b0c251 Make MaxIterationCount configurable, keep current value as default, fixes #763 (by @adamsitnik)
- 6f693e warn the users (once!) that if they run less than 15 iterations, the Multimod... (by @adamsitnik)
- a9664f don't execute long operations more than once per iteration (#760), fixes #736 (by @adamsitnik)
- 7e8448 if IterationSetup is provided, and InvocationCount and UnrollFactor are not, ... (by @adamsitnik)
- a40c75 explain the users why they did hit OOM, fixes #665, #368, #551 (by @adamsitnik)
- e66bb0 arrays can be arguments and params, fixes #712 (by @adamsitnik)
- 94b83e don't call IterationSetup and Cleanup for Idle, fixes #464 (by @adamsitnik)
- 90f9ca Add .NET Core 2.2 support, fixes #765 (by @adamsitnik)
- 132048 Better mValue formatting in MultimodalDistributionAnalyzer (by @AndreyAkinshin)
- 5f08c2 Merge pull request #764 from dotnet/iterationSetupRunOnce (by @AndreyAkinshin)
- 2b5dde Introduce OutlierMode (by @AndreyAkinshin)
- 226716 OutliersAnalyserTests (by @AndreyAkinshin)
- cabef0 support Jagged Arrays for ArgumentsSource, fixes #769 (by @adamsitnik)
- 808a9d support generic by ref arguments with an ugly hack due to reflection limitati... (by @adamsitnik)
- ea9f70 remove the ugly hack (by @adamsitnik)
- cb4291 make it possible to use arrays of types with no public parameterless ctor (li... (by @adamsitnik)
- 272e42 diassembly diagnoser: handle case where two different methods have same meta... (by @adamsitnik)
- ea16d1 update preview dependencies to 4.5.0 (by @adamsitnik)
- 97ddd6 Make it possible to use Span as benchmark argumen, fixes #774 (by @adamsitnik)
- 4863be more generic solution for #774 (by @adamsitnik)
- f63726 update build to use rc1 (to fix the build) (by @adamsitnik)
- a38c70 make it possible to pass array(s) of reference types as arguments (by @adamsitnik)
- 306adc use full Job type name to avoid naming conflicts, fixes #778 (by @adamsitnik)
- e92c5b use DOTNET_MULTILEVEL_LOOKUP and IgnoreCorLibraryDuplicatedTypes to fix the... (by @adamsitnik)
- 4e9844 Trimming the argument values makes them actually shorter #748 cc @ahsonkhan (by @adamsitnik)
- 846d80 Merge branch 'master' of https://github.com/dotnet/BenchmarkDotNet (by @adamsitnik)
- 3c3b47 have two main actions: with unroll and without, for no unroll icrease the ste... (by @adamsitnik)
- 56f02c use full names in the auto-generated code to avoid possible conflicts (I just... (by @adamsitnik)
- e75c44 Update documentations for WithOutlierMode (by @AndreyAkinshin)
- 1840ae Merge pull request #766 from dotnet/outliers (by @AndreyAkinshin)
- 5ae4bc Fixed BrandString support for Windows 10.0.17134 (by @AndreyAkinshin)
- 4d6dfe BrandString support for macOS Mojave (by @AndreyAkinshin)
- 426fbc Initial DocFX support, fixes #710 (by @AndreyAkinshin)
- fe00d7 Merge pull request #781 from dotnet/docfx (by @AndreyAkinshin)
- f0c06e Allow to pass string as ReadOnlySpan
only for .NET Core 2.1 where the i... (by @adamsitnik) - bbe273 make netcoreapp2.1 default for .NET Core 2.1 + expose few things which are re... (by @adamsitnik)
- bd22b3 BenchmarkDotNet.Samples refactoring, fixes #583 (by @AndreyAkinshin)
- 149e5e Merge pull request #783 from dotnet/docfx-samples (by @AndreyAkinshin)
- 237e36 Flat namespace for BenchmarkDotNet.Attributes (by @AndreyAkinshin)
- 24d2fe Remove obsolete namespaces in IntegrationTests (by @AndreyAkinshin)
- cb25a7 docs: Visual Studio-like style for code snippets (by @AndreyAkinshin)
- 914922 docs: add samples for baselines (by @AndreyAkinshin)
- 159e85 docs: fix year in license (by @AndreyAkinshin)
- 0b02d0 docs: add IntroEnvVars (by @AndreyAkinshin)
- 4b0f38 Unicode support (#735) (by @Rizzen)
- 971236 Unicode support: cleanup (by @AndreyAkinshin)
- 7c43da CommonExtensions cleanup (by @AndreyAkinshin)
- 04c0ad Fix link to rplot.png in README.md (by @AndreyAkinshin)
- b16b83 docs: samples for setup and cleanup (by @AndreyAkinshin)
- c05ac6 add link to inprocesstoolchain (#790) (by @IanKemp)
- 44ea0f docs: add changelog (#789) (by @AndreyAkinshin)
- 8a31aa docs: save changelog details for old versions in repo (by @AndreyAkinshin)
- edd0a3 docs: customizing-runtime.md (by @AndreyAkinshin)
- edf7f6 Improve filtering from console args (#785) (by @adamsitnik)
- d9e18d a type can have no namespace (by @adamsitnik)
- 4bbffe docs: update docfx version (by @AndreyAkinshin)
- 52e769 Don't exclude allocation quantum side effects for .NET Core 2.0+, fixes #794 (by @adamsitnik)
- 24f8da Cake targets for DocFX (by @AndreyAkinshin)
- db0724 docs: add api/index.md (by @AndreyAkinshin)
- 026c00 docs: statistics (by @AndreyAkinshin)
- ae5baf docs: misc fixes (by @AndreyAkinshin)
- fa5cf5 docs: multiversion combobox (by @AndreyAkinshin)
- a49cf9 docs: add full contributor list (by @AndreyAkinshin)
- 803686 always use FQDN to avoid any possible duplicates, #529 strikes back after a year (by @adamsitnik)
- 315530 make sure DisassemblyDiagnoser output is exported, fixes bug introduced in #785 (by @adamsitnik)
- 167476 docs: improved diagnosers.md (by @AndreyAkinshin)
- b7f9aa docs: improved choosing-run-strategy (by @AndreyAkinshin)
- 5da534 remove MultimodalDistributionAnalyzer hint introduced in #763 (by @adamsitnik)
- 376339 Merge pull request #796 from dotnet/docs-versions (by @adamsitnik)
- 57005f Extend exported json file with FullName using xunit naming convention for int... (by @adamsitnik)
- 9c0a2e docs: improved exporters.md (by @AndreyAkinshin)
- 22f553 docs: better sample generation (by @AndreyAkinshin)
- 734635 docs: improved columns.md (by @AndreyAkinshin)
- a82562 docs: improved configs.md (by @AndreyAkinshin)
- e7a458 docs: InProcess samples (by @AndreyAkinshin)
- 602562 docs: imrpovded order-providers.md (by @AndreyAkinshin)
- 8576c5 docs: fix the rest of WithoutDocs samples (by @AndreyAkinshin)
- 13b44e docs: rename changelog-generator to _changelog (by @AndreyAkinshin)
- 9a9648 docs: fix link to InProcessToolchain (by @AndreyAkinshin)
- 5716c1 escape tabs and enters in the exported benchmark id (to keep it in sync with ... (by @adamsitnik)
- 4be9bf MemoryDiagnoser handles IterationSetup and Cleanup since #606, removing old i... (by @adamsitnik)
- f92532 add --job=core to command line arguments, fixes #793 (by @adamsitnik)
- 1c656d update the docs with the change in IterationSetup behavior, #764 (by @adamsitnik)
- 6fd39b job Mutators (#800)fixes #713 (by @adamsitnik)
- 8954dc Rename: OrderProvider -> Orderer (#787) (by @AndreyAkinshin)
- 7b47c6 Rename: Benchmark -> BenchmarkCase (#787) (by @AndreyAkinshin)
- cc6f1b Rename: Target -> Descriptor (#787) (by @AndreyAkinshin)
- 17bb68 Rename: EnvMode -> EnvironmentMode (#787) (by @AndreyAkinshin)
- 73a6cc Rename: Infrastructure.EnvironmentVariables -> Environment.EnvironmentVariabl... (by @AndreyAkinshin)
- 6118f1 Huge IterationMode renaming (#787) (by @AndreyAkinshin)
- 035452 Handle super narrow distributions in AdaptiveHistogramBuilder, fixes #802 (by @AndreyAkinshin)
- b705b3 print Processor Affinity as a bitmask in the summary (by @adamsitnik)
- 0db126 fix MacOs build where the default affinity is 0 or we can't read it for some ... (by @adamsitnik)
- 5e6e33 make sure the characteristic names match the properties names + rename Target... (by @adamsitnik)
- f4cd0d Baseline improvements (#787) (by @AndreyAkinshin)
- 124a52 Fix tests (#787) (by @AndreyAkinshin)
- e8bf99 fix mac test, make sure IsMutator does not flow to applied job (by @adamsitnik)
- 95750c Make it possible to configure Min and Max Warmup Iteration Count, fixes #809 (by @adamsitnik)
- 99e753 handle new *Ansi events to make Inlining and TailCall Diagnosers work with .N... (by @adamsitnik)
- 62e75c docs: update articles/contributing/documentation (by @AndreyAkinshin)
- 41c5f9 Cake: update DocFX (2.36.2->2.37) (by @AndreyAkinshin)
- e4b37c Cake: update .NET Core SDK (2.1.300-rc1-008673->2.1.300) (by @AndreyAkinshin)
- ad1645 Cpu info improvement (#799) (by @Rizzen)
- 61e95e [Params] exported to json should be delimited by ", " #701 (by @adamsitnik)
- 4cd1df handle the types as arguments to match xunit naming convention for porting pu... (by @adamsitnik)
- ff6613 for type parameters we should display non-trimmed type name without namespace... (by @adamsitnik)
- 89f195 explain how we measure GC stats in the docs, fixes #811 (by @adamsitnik)
- c7731c Arguments should be passed to asynchronous benchmarks, fixes #818 (by @adamsitnik)
- 0f9c48 add info about Min/Max counts to docs (by @adamsitnik)
- 33e568 fix MemoryDiagnoserTests issues, fixes #813 (by @adamsitnik)
- 844e95 set DOTNET_MULTILEVEL_LOOKUP=0 to get customDotNetCli path working, fixes #820 (by @adamsitnik)
- 7e2d54 if iteration cleanup is provided, the benchmark should be executed once per i... (by @adamsitnik)
- 2132d0 allow to set summary style in fluent way (by @adamsitnik)
- dfea69 allow to set multuple targets for attributes without string concatenation, fi... (by @adamsitnik)
- 6267b2 Use 3rd party lib for console args parsing + support globs for filtering (#824) (by @adamsitnik)
- 9c269f make sure the generic type arguments are displayed in the summary, not `1 (by @adamsitnik)
- c7d0b9 don't duplicate the jobs when parsing config (by @adamsitnik)
- d7825e show generic type name in a joined summary (by @adamsitnik)
- 528c9c make sure the config parsing and job merging works as expected (by @adamsitnik)
- a7426e LLVM support in MonoDisassembler (by @AndreyAkinshin)
- c724e9 Fix typos (by @AndreyAkinshin)
- cdbb37 allow to filter benchmarks by simple type name, fixes #827 (by @adamsitnik)
- eac833 Read StandardOutput in a smart way to avoid infinite loops (#830), #828 (by @houseofcat)
- a298c2 Error message for wrong command line filter, fixes #829 (by @adamsitnik)
- a7ecda initial release notes (#833) (by @adamsitnik)
- 36bf7c Rename: General -> Actual (#787) (by @AndreyAkinshin)
- a1ec4b Add _changelog/details/v0.11.0.md (by @AndreyAkinshin)
- 558cae Improved docs for v0.11.0 (by @AndreyAkinshin)
- e45f69 docs: update main.js (by @AndreyAkinshin)
- 53e576 Update links to docs in README (by @AndreyAkinshin)
- 3a8990 update links in docs/index.md (by @AndreyAkinshin)
- 5ad710 Repair obsolete logo link (by @AndreyAkinshin)
- e38afb Cake: update DocFX (2.37->2.37.1) (by @AndreyAkinshin)
- 5b8f91 docs: add analytics scripts in template (by @AndreyAkinshin)
- 3ec8f7 docs: add redirects to v0.10.14 (by @AndreyAkinshin)
- a00bf6 docs: update how-it-works (by @AndreyAkinshin)
- 73980e docs: add redirect for index.htm (by @AndreyAkinshin)
- fad583 docs: update changelog for v0.11.0 (by @AndreyAkinshin)
- 74d552 Update list of NuGet packages in changelog/footer/v0.11.0 (by @AndreyAkinshin)
- 74084f Set library version: 0.11.0 (by @AndreyAkinshin)
Contributors (11)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Evgeny Peshkov (@epeshk)
- Ian Kemp (@IanKemp)
- Irina Ananeva (@morgan-kn)
- Lucas Trzesniewski (@ltrzesniewski)
- Mark Tkachenko (@Rizzen)
- Paul Ness (@paulness)
- Stefan (@Tornhoof)
- Tony Morris (@afmorris)
- Tristan Hyams (@houseofcat)
Thank you very much!
Additional details
Date: July 23, 2018
Milestone: v0.11.0 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.11.0
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.11.0
BenchmarkDotNet v0.10.14
- Per-method parameterization (Read more)
- Console histograms and multimodal disribution detection
- Many improvements for Mono disassembly support on Windows (Read more)
- Many bugfixes
Milestone details
In the v0.10.14 scope, 8 issues were resolved and 11 pull requests were merged. This release includes 47 commits by 8 contributors.
Resolved issues (8)
- #256 Per-method parameterization (assignee: @AndreyAkinshin)
- #429 Detect multimodal distributions (assignee: @AndreyAkinshin)
- #496 Integration with TravisCI (assignee: @jongalloway)
- #684 Horology.ClockTests.ChronometerTest fails on Travis CI (macOS) (assignee: @AndreyAkinshin)
- #689 DisassemblyDiagnoser for Mono does not work on Windows and Linux (assignee: @morgan-kn)
- #691 Cannot run F# benchmarks when benchmark returns F# generic (assignee: @adamsitnik)
- #697 Copy custom setting from app.config in multitarget projects (assignee: @adamsitnik)
- #706 Support private builds of .NET Runtime (assignee: @adamsitnik)
Merged pull requests (11)
- #577 Arguments (by @adamsitnik)
- #647 Histograms and multimodal distribution detection, fixes #429 (by @AndreyAkinshin)
- #674 Cleanup suggested by VS2017 Code Analysis (plus one typo) (by @shoelzer)
- #675 Fix IDE0034: 'default' expression can be simplified (by @shoelzer)
- #676 Correct NodeTime text which links to NodaTime api (by @MishaHusiuk)
- #681 Fix typo (Perdictor -> Predictor) (by @dmitry-ra)
- #682 Fix typo (Perdictor -> Predictor) (by @dmitry-ra)
- #683 Integration with TravisCI (by @Ky7m)
- #694 Fix 689 (by @morgan-kn)
- #695 Rename Program to UniqueProgramName to avoid conflicts, fixes #691 (by @adamsitnik)
- #696 Build system: Update dotnet SDK and dotnet runtime. Enable FastTests netcoreapp1.1 on non-Windows. (by @Ky7m)
Commits (47)
- 41aeea Histograms and multimodal distribution detection, fixes #429 (by @AndreyAkinshin)
- 960e58 Handle measurements with zero operations (by @AndreyAkinshin)
- 19cddd Fix typo in BaselineScaledColumn.cs (by @dfederm)
- a99594 Merge pull request #673 from dfederm/dfederm/fix-typo (by @AndreyAkinshin)
- 5b3425 Cleanup suggested by VS2017 Code Analysis (plus one typo) (#674) (by @shoelzer)
- 16b611 Fix IDE0034: 'default' expression can be simplified (by @shoelzer)
- 048b32 Merge pull request #675 from shoelzer/master (by @AndreyAkinshin)
- 9d5f71 Correct NodeTime text which links to NodaTime lib (by @MishaHusiuk)
- c450c7 Merge pull request #676 from MishaHusiuk/patch-1 (by @adamsitnik)
- 9fad52 Fix typo (Perdictor -> Predictor) (by @dmitry-ra)
- 3d906f Fix typo (Perdictor -> Predictor) (by @dmitry-ra)
- d1a48e Merge pull request #681 from dmitry-ra/master (by @AndreyAkinshin)
- 4ccd35 Merge pull request #682 from dmitry-ra/patch-1 (by @AndreyAkinshin)
- f743a1 CakeBuild 0.24.0 -> 0.26.1 (by @Ky7m)
- c5eb40 Remove postProjects from solution file. (by @Ky7m)
- e60387 Pass correct configuration to test settings (by @Ky7m)
- 224ab8 Disable public sign option for F# project (by @Ky7m)
- ee98f3 Limit Max CPU count for msbuild workers (by @Ky7m)
- 17031d Fix readme file (by @Ky7m)
- 6fbae8 One more update to readme file (by @Ky7m)
- cb90f2 disable Travis failing test #684 to unblock #683 (by @adamsitnik)
- 782ca7 Merge pull request #683 from Ky7m/Integration-with-TravisCI (by @adamsitnik)
- eebf92 Merge branch 'master' into multimodal (by @adamsitnik)
- 10511b Merge pull request #647 from dotnet/multimodal (by @adamsitnik)
- 57bc17 Fix bug in ClockTests.ChronometerTest, fixes #684 (by @AndreyAkinshin)
- 7c4b14 Arguments (#577), fixes #256 (by @adamsitnik)
- 40771c Update dotnet SDK (2.1.4 -> 2.1.101) and dotnet runtime (1.1.6 -> 1.1.7). (by @Ky7m)
- 88a9db Merge pull request #696 from Ky7m/build-runtime-update (by @adamsitnik)
- 4ac6ad we need different name than typical "Program" to avoid problems with referenc... (by @adamsitnik)
- 1178d6 Update build badges (by @AndreyAkinshin)
- 24ed1f ProcessHelper: handle null Data values in OutputDataReceived, fix #689 (by @morgan-kn)
- 7a3d2b MonoDisassembler improvements (by @morgan-kn)
- f1a0f5 Merge pull request #694 from morgan-kn/Fix689 (by @AndreyAkinshin)
- 428905 .NET Core apps are .dlls (not .exes), fixes #697 (by @adamsitnik)
- befbc8 Add FAQ notes about #692 (by @AndreyAkinshin)
- b4504b Support private builds of .NET Runtime, fixes #706 (by @adamsitnik)
- c93e1e Introduce separate logic for Windows10 brand strings (by @AndreyAkinshin)
- 685766 Shortify Windows 10 brand strings in the summary (by @AndreyAkinshin)
- 9bdd0c Shortify cpu info in summary (by @AndreyAkinshin)
- 2288ad Prettify macOS brand string (by @AndreyAkinshin)
- 8a0b48 Handle tailed nop instructions in mono disasm output (by @AndreyAkinshin)
- d80834 Advanced DryJob attributes (by @AndreyAkinshin)
- 9a37ad Handle invalid mono disasm outputs (by @AndreyAkinshin)
- 21d6d7 Add IntroDisasm (by @AndreyAkinshin)
- 5e37b5 Add "Disassembly Diagnoser for Mono on Windows" in docs (by @AndreyAkinshin)
- c2c4e8 set COMPLUS_Version env var for private Clr builds even if no env vars were d... (by @adamsitnik)
- 88b088 Set library version: 0.10.14 (by @AndreyAkinshin)
Contributors (8)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- David Federman (@dfederm)
- Dmitry Razumikhin (@dmitry-ra)
- Igor Fesenko (@Ky7m)
- Irina Ananeva (@morgan-kn)
- MishaHusiuk (@MishaHusiuk)
- Steve Hoelzer (@shoelzer)
Thank you very much!
Additional details
Date: April 09, 2018
Milestone: v0.10.14 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.14
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.14
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.14
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.14
BenchmarkDotNet v0.10.13
Overview post: BenchmarkDotNet v0.10.13
Milestone details
In the v0.10.13 scope, 15 issues were resolved and 9 pull requests were merged. This release includes 50 commits by 9 contributors.
Resolved issues (15)
- #541 Mono Support for DisassemblyDiagnoser (assignee: @morgan-kn)
- #614 Build fails with "'Microsoft.NETCore.App', version '1.1.2' was not found" probably due to 1.1.4 runtime not being available
- #626 Support Visual Basic project files (.vbroj) targeting .NET Core (assignee: @adamsitnik)
- #630 Bug: Statistics.DivMean - NullReferenceException (assignee: @AndreyAkinshin)
- #631 Bug: Generic benchmark class fails for DisassemblyDiagnoser with "Sequence contains no matching element" (assignee: @adamsitnik)
- #632 ParamsSource no longer sorted in results (assignee: @AndreyAkinshin)
- #634 Extend SummaryOrderPolicy (assignee: @adamsitnik)
- #636 Unable to run Runner.exe --method MethodName (assignee: @adamsitnik)
- #640 Disassembler fails with generic instance (assignee: @adamsitnik)
- #643 BenchmarkDotNet should respect
LangVersion
project setting (assignee: @adamsitnik) - #644 BenchmarkDotNet.Mathematics.RankHelper again. (assignee: @AndreyAkinshin)
- #648 BenchmarkDotNet requires dotnet cli toolchain to be installed (assignee: @adamsitnik)
- #651 Support ANY CoreFX and CoreCLR builds (assignee: @adamsitnik)
- #652 BenchmarkSwitcher should support generic types with parameterless public ctors (assignee: @adamsitnik)
- #653 Proper way to run BenchmarkDotNet on macOS/Linux (assignee: @adamsitnik)
Merged pull requests (9)
- #624 Upgrade build tools (by @Ky7m)
- #625 Fix xunit warnings connected to usage of Assert.Equal() to check for Null (by @Ky7m)
- #633 HostEnvironmentInfo: remove LogicalCoreCount (by @morgan-kn)
- #637 Mono Support for DisassemblyDiagnoser #541 (by @morgan-kn)
- #639 Portability.Cpu tests improvements (by @morgan-kn)
- #642 sync DataContracts to CopiedDataContracts (by @morgan-kn)
- #645 Fixing --help display for options (by @ENikS)
- #646 Allow sorting by the Method name in DefaultOrderProvider and OrderProviderAttribute (by @ENikS)
- #666 Plots...Examples...Added A config example in F# (by @ScottHutchinson)
Commits (50)
- a26e82 Upgrade build tools: (by @Ky7m)
- 1643cb Merge pull request #624 from Ky7m/upgrade-build-tools (by @adamsitnik)
- abae51 Fix xunit warnings connected to usage of Assert.Equal() to check for null val... (by @Ky7m)
- fb68bc support Visual Basic .NET Core projects, fixes #626 (by @adamsitnik)
- 067a33 Remove redundant properties in common.props (by @AndreyAkinshin)
- 80deb9 BuildNumber fix in common.props (by @AndreyAkinshin)
- 87b458 Add CONTRIBUTING.md (by @AndreyAkinshin)
- 8bcf42 Add CODE_OF_CONDUCT.md (by @AndreyAkinshin)
- d3867d HostEnvironmentInfo: remove LogicalCoreCount (#633) (by @morgan-kn)
- 06e66a Specify PLACE_SIMPLE_EMBEDDED_STATEMENT_ON_SAME_LINE in DotSettings (by @AndreyAkinshin)
- d8ac43 Mono Support for DisassemblyDiagnoser #541 (by @morgan-kn)
- 4356da Merge pull request #637 from morgan-kn/MonoSupportForDisassemblyDiagnoser (by @AndreyAkinshin)
- 7572f4 Fix paths to images in docs (by @AndreyAkinshin)
- f076df Portability.Cpu tests improvements (by morgan_kn)
- da6499 Merge pull request #639 from morgan-kn/TestsImprovment (by @AndreyAkinshin)
- 5dd1a5 Disassembly Diagnoser: support for generic types, fixes #640 fixes #631 (by @adamsitnik)
- 3c0e71 diassembly diangoser: different methods can have same metadata id, add type i... (by @adamsitnik)
- 294801 test fix ;) (by @adamsitnik)
- 9e66bb sync DataContracts to CopiedDataContracts (by @morgan-kn)
- 690f34 Merge pull request #642 from morgan-kn/sync (by @adamsitnik)
- e1e3e2 don't use type.Fullname for file names, it's too long for generics (by @adamsitnik)
- 43d7c2 we restore before build, so build does need to restore too (it's new default ... (by @adamsitnik)
- 9d4c33 trying harder to trick the JIT (#640, #631) (by @adamsitnik)
- f8f70f Natural ordering for logical groups, fixes #632 (by @AndreyAkinshin)
- a2ec34 copy LanguageVersion to the output .csproj, fixes #643 (by @adamsitnik)
- 31e6dd Fixing --help display for options (#645), fixes #636 (by @ENikS)
- 45ace9 Allow sorting by the Method name in DefaultOrderProvider and OrderProviderAtt... (by @ENikS)
- 8811f2 Fix typo in docs/guide/Contributing/Disassembler.md (by @AndreyAkinshin)
- 7da7b9 allow the users to customize Artifacts Path, #377 (by @adamsitnik)
- 7554bf validate CustomDotNetCliPath, fixes #648 (by @adamsitnik)
- 683964 Support ANY CoreFX and CoreCLR builds, fixes #651 (by @adamsitnik)
- 695386 support also only custom CoreFX scenario (default runtime), part of #651 (by @adamsitnik)
- eb4dcf allow the users to copy some files after the publish, part of #651 (by @adamsitnik)
- b076a3 Add Newtonsoft.Json in the README (by @AndreyAkinshin)
- b4eef5 better generics support, fixes #652 (by @adamsitnik)
- 77fd46 Handle null values in Statistics.DivMean and Statistics.DivVariance, fixes #630 (by @AndreyAkinshin)
- e547f8 Fix NRE in RankColumn, fixes #644 (by @AndreyAkinshin)
- 28aa94 allow the users to choose .NET 4.7.1 (by @adamsitnik)
- 503570 Fixed image link (by @svick)
- 93cc85 Merge pull request #655 from svick/patch-1 (by @adamsitnik)
- d33cde Fixed code block formatting (by @svick)
- cb7c09 Merge pull request #657 from svick/patch-1 (by @adamsitnik)
- 650b4a host Mono process should be able to build .NET Core child process, fixes #653 (by @adamsitnik)
- d1dcab List formatting for FAQ (by @svick)
- fe52e3 Merge pull request #663 from svick/faq-formatting (by @adamsitnik)
- 7792cb Example in F#: with corrected code formatting (by @ScottHutchinson)
- e6b225 Merge pull request #666 from ScottHutchinson/patch-2 (by @AndreyAkinshin)
- f90207 Allow restore and build command override (#670) (by @BonnieSoftware)
- 4443cd Update example in README (by @AndreyAkinshin)
- de0b68 Set library version: 0.10.13 (by @AndreyAkinshin)
Contributors (9)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- BonnieSoftware (@BonnieSoftware)
- Eugene Sadovoi (@ENikS)
- Igor Fesenko (@Ky7m)
- Irina Ananeva (@morgan-kn)
- morgan_kn
- Petr Onderka (@svick)
- Scott Hutchinson (@ScottHutchinson)
Thank you very much!
Additional details
Date: March 02, 2018
Milestone: v0.10.13 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.13
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.13
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.13
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.13
BenchmarkDotNet v0.10.12
Overview post: BenchmarkDotNet v0.10.12
Highlights
- Improved DisassemblyDiagnoser: BenchmarkDotNet contains an embedded disassembler so that it can print assembly code for all benchmarks; it's not easy, but the disassembler evolves in every release.
- Improved MemoryDiagnoser: it has a better precision level, and it takes less time to evaluate memory allocations in a benchmark.
- New TailCallDiagnoser: now you get notifications when JIT applies the tail call optimizations to your methods.
- Better environment info: when your share performance results, it's very important to share information about your environment. The library generates the environment summary for you by default. Now it contains information about the amount of physical CPU, physical cores, and logic cores. If you run a benchmark on a virtual machine, you will get the name of the hypervisor (e.g., Hyper-V, VMware, or VirtualBox).
- Better summary table: one of the greatest features of BenchmarkDotNet is the summary table. It shows all important information about results in a compact and understandable form. Now it has better customization options: you can display relative performance of different environments (e.g., compare .NET Framework and .NET Core) and group benchmarks by categories.
Milestone details
In the v0.10.12 scope, 15 issues were resolved and 10 pull requests were merged. This release includes 42 commits by 9 contributors.
Resolved issues (15)
- #273 Create a tail call diagnoser
- #442 Is it possible to configure benchmark to assign rank for runtime? (assignee: @AndreyAkinshin)
- #543 Run Disassembly Diagnoser without extra run (assignee: @adamsitnik)
- #546 Synthesizing labels for jump targets (assignee: @adamsitnik)
- #574 Display VM hypervisor in summary section (assignee: @lukasz-pyrzyk)
- #582 Print amount of logical and physical core (assignee: @morgan-kn)
- #599 Proper HTML escaping of BenchmarkAttribute Description
- #606 Improve Memory Diagnoser (assignee: @adamsitnik)
- #608 Properly escaping generated markdown (assignee: @AndreyAkinshin)
- #612 Disassembler DisassembleMethod fails with "Object reference not set to an instance of an object.", (assignee: @adamsitnik)
- #617 Allow baseline per category (assignee: @AndreyAkinshin)
- #618 Enable ApprovalTests in .NET Core 2.0 tests (assignee: @AndreyAkinshin)
- #621 Try to search for missing references if build fails (assignee: @adamsitnik)
- #622 Support of new GC settings (assignee: @adamsitnik)
- #623 RPlotExporter uses wrong path to csv measurements (assignee: @AndreyAkinshin)
Merged pull requests (10)
- #573 Сreate a tail call diagnoser (by @GeorgePlotnikov)
- #576 Display VM name in summary section, fixes #574 (by @lukasz-pyrzyk)
- #595 Migrate all project to new project system. (by @mfilippov)
- #598 Added info about the new TailCallDiagnoser (by @GeorgePlotnikov)
- #603 Fix HTML Encoding for Html Exporter (by @Chrisgozd)
- #605 Grammar (by @onionhammer)
- #607 Print amount of logical and physical core #582 (by @morgan-kn)
- #615 Quick fix Disassembler.Program.GetMethod when more than one method found just return null (by @nietras)
- #619 Logical group support, fixes #617 (by @AndreyAkinshin)
- #620 New README.md (by @AndreyAkinshin)
Commits (42)
- 6f587d Migrate all project to new project system. (by @mfilippov)
- 47ba57 added info about the new TailCallDiagnoser (by @GeorgePlotnikov)
- c1a4b2 Сreate a tail call diagnoser (#573) (by @GeorgePlotnikov)
- ebe3e2 Merge pull request #598 from GeorgePlotnikov/patch-1 (by @adamsitnik)
- 6249f0 some polishing of the JIT diagnosers (by @adamsitnik)
- 119231 Fix HTML Encoding for Html Exporter (#603), fixes #599 (by @Chrisgozd)
- fe3f30 Disassembly Prettifier, fixes #546 (by @adamsitnik)
- 3eb63f Merge pull request #595 from mfilippov/new-fs-vb-proj (by @adamsitnik)
- 16d03f make our F# samples work for .NET Core 2.0 (by @adamsitnik)
- d06de7 bring back our old Visual Basic and F# integration tests (by @adamsitnik)
- 63249b "Kaby Lake R" and "Coffee Lake" support in ProcessorBrandStringHelper (by @AndreyAkinshin)
- a8a09e disassembly prettifier: highlighting references to labels, jumping to next on... (by @adamsitnik)
- e6d747 Grammar (by @onionhammer)
- fef4aa Merge pull request #605 from onionhammer/patch-1 (by @adamsitnik)
- ffacd7 don't require extra run for DisassemblyDiagnoser, fixes #543, #542 (by @adamsitnik)
- bcac26 revert last commit change (run global setup regardless of Jitting) (by @adamsitnik)
- 3e87d8 don't perform an extra run to get GC stats for .NET Core, part of #550 (by @adamsitnik)
- f87dbc obtain GC stats in separate iteration run, no overhead, support for iteration... (by @adamsitnik)
- e5fe0f update to C# 7.1 so we can use all the latest features (by @adamsitnik)
- bc50b2 build benchmarks in Parallel, part of #550 (by @adamsitnik)
- e59590 Display VM name in summary section, fixes #574 (#576) (by @lukasz-pyrzyk)
- 8908f8 fix GetMethod (by @nietras)
- 4ca82d Merge pull request #615 from nietras/disassembler-more-than-one-method-fix (by @adamsitnik)
- 387ae5 be more defensive when trying to read source code with disassembler, part of ... (by @adamsitnik)
- 703815 docs: how to contribute to disassembler (by @adamsitnik)
- 242671 Enable ApprovalTests in .NET Core 2.0 tests, fixes #618 (by @AndreyAkinshin)
- c4d21b Print amount of logical and physical core #582 (#607) (by @morgan-kn)
- e33e84 Add HtmlReady dialect for MarkdownExporter, fixes #608 (by @AndreyAkinshin)
- cf167b Enable html escaping for GitHub markdown dialect, fixes #608 (by @AndreyAkinshin)
- 8bb28b Logical group support, fixes #617 (by @AndreyAkinshin)
- ae87c6 Merge pull request #619 from dotnet/logical-groups (by @adamsitnik)
- 14e90b parallel build post fix: don't write the compilation errors to NullLogger, re... (by @adamsitnik)
- db4ae8 Try to search for missing references if build fails, fixes #621 (by @adamsitnik)
- 0eba0f Support of new GC settings, fixes #622 (by @adamsitnik)
- e31b2d Revert Samples/Program.cs (by @AndreyAkinshin)
- 7f126b Add logs in RPlotExporter (by @AndreyAkinshin)
- f8a447 Fix path to csv in RPlotExporter, fixes #623 (by @AndreyAkinshin)
- 273f50 New plots in RPlotExporter (by @AndreyAkinshin)
- f293f0 New README.md (#620) (by @AndreyAkinshin)
- 5e3366 Update copyright year in docs (by @AndreyAkinshin)
- ab7458 Update index in docs (by @AndreyAkinshin)
- 4616d4 Set library version: 0.10.12 (by @AndreyAkinshin)
Contributors (9)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Christopher Gozdziewski (@Chrisgozd)
- Erik O'Leary (@onionhammer)
- Georgii Plotnikov (@GeorgePlotnikov)
- Irina Ananeva (@morgan-kn)
- Łukasz Pyrzyk (@lukasz-pyrzyk)
- Mikhail Filippov (@mfilippov)
- nietras (@nietras)
Thank you very much!
Additional details
Date: January 15, 2018
Milestone: v0.10.12 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.12
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.12
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.12
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.12
BenchmarkDotNet v0.10.11
Highlights
- ByRef and Stack-only support (#492, sample)
- .NET Core 2.1 support (#587)
- Improved LINQPad support
- Smart logic for precision in ScaledColumn (#509, #590)
- Better macOS version detection (15d72388)
- Minor fixes and improvements
Milestone details
In the v0.10.11 scope, 6 issues were resolved and 8 pull requests were merged. This release includes 18 commits by 8 contributors.
Resolved issues (6)
- #509 Better formatting for the Scaled column
- #579 Improve error message about non-optimized dependencies (assignee: @adamsitnik)
- #580 How to get benchmarks running from LINQPad? (assignee: @adamsitnik)
- #587 Support netcoreapp2.1 (assignee: @eerhardt)
- #588 Broken appveyor build
- #593 BenchmarkDotNet is not working with LinqPad (assignee: @adamsitnik)
Merged pull requests (8)
- #492 ByRef and Stack-only support (by @adamsitnik)
- #575 xUnit runner upgrade and small tests refactoring (by @Ky7m)
- #584 Fixed typo. (by @cincuranet)
- #589 Add support for netcoreapp2.1 (by @eerhardt)
- #590 Add precision to Scaled Column (by @Chrisgozd)
- #591 Fix CI build (by @Ky7m)
- #592 Removed a xunit workaround because an issue has been fixed (by @AlekseiKudelia)
- #597 Fix typo in WithCustomBuildConfiguration API (by @benjamin-hodgson)
Commits (18)
- 2a2e6c ByRef and Stack-only support (#492) (by @adamsitnik)
- 676c77 xUnit runner upgrade and small tests refactoring (#575) (by @Ky7m)
- 7a89cd Fixed typo. (by @cincuranet)
- dd28b2 add better error text for non-optimized dlls + add it to FAQ, fixes #579 (by @adamsitnik)
- 67e659 detect LINQPad problems and tell the user how to change them, fixes #580 (by @adamsitnik)
- 543bd6 don't warn about non-optimized LINQPad dependency (it's OK), #580 (by @adamsitnik)
- 8a94f2 Add support for netcoreapp2.1 (by @eerhardt)
- fb39db Merge pull request #589 from eerhardt/SupportNetCoreApp21 (by @adamsitnik)
- ef11f0 Add CoverageFilterXml in DotSettings (by @AndreyAkinshin)
- 962b6a Update DotSetttings (by @AndreyAkinshin)
- 717b62 BenchmarkDotNet.Horology cleanup (by @AndreyAkinshin)
- d1720b Upgrade version to 2.0.3 and explicitly specify fx version for .netcoreapp2.0 (by @Ky7m)
- 94d47a Removed a xunit workaround because an issue has been fixed (by Aleksei Kudelia)
- 15d723 More details in GetOsVersion on macOS (by @AndreyAkinshin)
- 696f89 Add precision to Scaled Column (#590) (by @Chrisgozd)
- e54924 Fix typo in WithCustomBuildConfiguration API (by Benjamin Hodgson)
- 8de978 Merge pull request #597 from benjamin-hodgson/patch-1 (by @adamsitnik)
- af1510 Set library version: 0.10.11 (by @AndreyAkinshin)
Contributors (8)
- Adam Sitnik (@adamsitnik)
- Aleksei Kudelia
- Andrey Akinshin (@AndreyAkinshin)
- Benjamin Hodgson
- Christopher Gozdziewski (@Chrisgozd)
- Eric Erhardt (@eerhardt)
- Igor Fesenko (@Ky7m)
- Jiri Cincura ↹ (@cincuranet)
Thank you very much!
Additional details
Date: December 01, 2017
Milestone: v0.10.11 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.11
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.11
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.11
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.11
BenchmarkDotNet v0.10.10
Highlights:
- Disassembly Diagnoser (read more here: Disassembling .NET Code with BenchmarkDotNet)
- ParamsSources
- .NET Core x86 support
- Environment variables and Mono args support
- Better environment description
- More: additional sections in the documentation, bug fixes, build script improvements, internal refactoring.
Overview post: BenchmarkDotNet v0.10.10
Milestone details
In the v0.10.10 scope, 34 issues were resolved and 18 pull requests were merged. This release includes 95 commits by 12 contributors.
Resolved issues (34)
- #160 Make ClrMd Source diagnoser working with new ClrMD api (assignee: @adamsitnik)
- #167 Detect virtual machine environment (assignee: @lukasz-pyrzyk)
- #262 Runtime knobs (assignee: @adamsitnik)
- #310 Support 32bit benchmarks for .NET Core (assignee: @adamsitnik)
- #350 ParamsSource (assignee: @adamsitnik)
- #437 Add
DisassemblyDiagnoser
for outputting disassembled JITed code. (assignee: @adamsitnik) - #466 MSBuild parameters are not passed to generated benchmark project (assignee: @adamsitnik)
- #495 Attributes put on base methods are not considered in derived class (assignee: @lukasz-pyrzyk)
- #500 Borken compilation for net46 projects when .NET Framework 4.7 is installed (assignee: @adamsitnik)
- #505 JsonExporterBase doesn't include MemoryDiagnoser stats in output
- #511 [bug] Bug in GetTargetedMatchingMethod() logic
- #513 IterationSetup not run in Job.InProcess
- #516 Get a compilation error "CS1009: Unrecognized escape sequence" when using verbatim strings
- #519 BenchmarkSwitcher.RunAllJoined throws InvalidOperationException (assignee: @AndreyAkinshin)
- #526 Remove project.json support (assignee: @adamsitnik)
- #529 No namespace in export filenames can lead to data loss
- #530 Build error on Appveyor with recent changes.
- #533 When I clone, build, and run BenchmarkDotNet.Samples I get an error
- #534 Allow the users to compare 32 vs 64 RyuJit for .NET Core (assignee: @adamsitnik)
- #535 No way to set RuntimeFrameworkVersion in multiple-version config (assignee: @adamsitnik)
- #536 Strange disassembly ordering/truncation (assignee: @adamsitnik)
- #537 Can't benchmark a netstandard2.0 project (assignee: @adamsitnik)
- #538 Duplicate using causing benchmark not to work (assignee: @adamsitnik)
- #539 Target .NET Core 2.0 to take advantage of the new APIs (assignee: @adamsitnik)
- #540 Artifacts for disassembler projects (assignee: @adamsitnik)
- #542 Problems with Disassembler + Job.Dry (assignee: @adamsitnik)
- #555 Test "CanDisassembleAllMethodCalls" fails on Ubuntu (assignee: @adamsitnik)
- #556 Table in report is broken in VSCode markdown viewer (assignee: @adamsitnik)
- #558 Warn the users when running Benchmarks from xUnit with shadow copy enabled (assignee: @adamsitnik)
- #559 DissassemblyDiagnoser jit/arch info seems to be wrong (assignee: @adamsitnik)
- #561 Strange behaviour when benchmark project is build in debug mode (assignee: @adamsitnik)
- #562 DisassemblyDiagnoser crashes on overloaded benchmark (assignee: @adamsitnik)
- #564 [Bug] Benchmarking a method doesn't run global setup when filter is applied (assignee: @adamsitnik)
- #571 Allow users to use non compile-time constants as Parameters (assignee: @adamsitnik)
Merged pull requests (18)
- #507 Fix a typo in Jobs.md (by @aidmsu)
- #508 Fixed some typos and grammar (by @lukasz-pyrzyk)
- #512 Warning about antivirus software after benchmark failure (by @lukasz-pyrzyk)
- #514 #495 - Unit test for reading attributes from the base class (by @lukasz-pyrzyk)
- #515 Fix #513 - IterationSetup not run in Job.InProcess (by @ig-sinicyn)
- #518 Fixed information about MemoryDiagnoser. (by @cincuranet)
- #520 XML Exporter documentation and samples (by @Teknikaali)
- #525 adding validator for setup cleanup attributes (by @ipjohnson)
- #527 Detecting virtual machine hypervisor, #167 (by @lukasz-pyrzyk)
- #531 Remove --no-build argument for dotnet test & pack commands. (by @Ky7m)
- #532 Fix type of local in EmitInvokeMultipleBody (by @pentp)
- #547 Fix markdown headers (by @jawn)
- #548 Fix condition in package reference list and update dotnet cli version from 1.0.4 to 2.0.0 for non-Windows system (by @Ky7m)
- #549 Project files cleanup (by @Ky7m)
- #552 Fix exporters to use fully qualified filenames (by @Teknikaali)
- #563 Remove leading space character in a MD table row, #556 (by @rolshevsky)
- #565 Single point of full config creation (by @ig-sinicyn)
- #569 Update cakebuild scripts (by @Ky7m)
Commits (95)
- 682820 Fix typo in Jobs.md (by @aidmsu)
- e82a8b Fixed some typos and grammar (by @lukasz-pyrzyk)
- a0e9b9 Disassembly Diagnoser: displaying ASM, IL and C# for any JIT (by @adamsitnik)
- 57e0f0 recursive disassembling (by @adamsitnik)
- 1975ae return structured results from Disassembler (by @adamsitnik)
- 9ae365 Warning about antivirus software after benchmark failure (#512) (by @lukasz-pyrzyk)
- 74b41e Unit test for reading attributes from the base class, fixes #495 (by @lukasz-pyrzyk)
- 3bab2d Fix #513 - IterationSetup not run in Job.InProcess (#515) (by @ig-sinicyn)
- 769a39 use the IL instructions to detect more calls (by @adamsitnik)
- b69537 use InstructionPointer to combine asm with hardware counters (by @adamsitnik)
- 200244 Fixed information about MemoryDiagnoser. (by Jiri Cincura)
- 848a1a handling the lovely edge cases (Cecil vs ClrMD differences in naming types an... (by @adamsitnik)
- 40049b single text representation of asm is a range of IPs! (by @adamsitnik)
- 56e252 XML Exporter documentation and samples (#520) (by @Teknikaali)
- c18597 eliminate duplicates (ClrMD fault), be more defensive for edge cases (by @adamsitnik)
- a9262f allow the users to specify recursive depth limit (50MB output for simple lock... (by @adamsitnik)
- fbe329 Support params which include slashes, fixes #516 (by @AndreyAkinshin)
- f2b9c0 Fix RunAllJoined, fixes #519 (by @AndreyAkinshin)
- 983764 UX ;) (by @adamsitnik)
- c010de adding validator for setup cleanup attributes (by @ipjohnson)
- 424723 Merge pull request #525 from ipjohnson/master (by @adamsitnik)
- 7b680a prefer unit tests over integration tests if possible (by @adamsitnik)
- 93dc6e Remove project.json support, fixes #526 (by @adamsitnik)
- 19f22b Merge pull request #518 from cincuranet/docs (by @adamsitnik)
- fe2db1 configurable, runtime specific diagnosers, hard part transparent to end users (by @adamsitnik)
- fb60e5 disassembly diagnoser for Mono (by @adamsitnik)
- 55ce0d smart diagnoser can choose the right disassembler (by @adamsitnik)
- 46c911 one test to verify all scenarios (by @adamsitnik)
- d06086 minor improvements (by @adamsitnik)
- 116119 group instructions into maps for better visualization (by @adamsitnik)
- d19b1e test fix: split on any new line ;) (by @adamsitnik)
- 647a67 Merge branch 'asm' (by @adamsitnik)
- 91c8e4 move disassembler stuff to resources of Core project to make it super easy to... (by @adamsitnik)
- 363900 Remove --no-build argument for dotnet test & pack commands. (by @Ky7m)
- 22e993 Disable parallel build option (by @Ky7m)
- 9c327c Merge pull request #531 from Ky7m/removes-no-build-argument (by @adamsitnik)
- 20db28 the docs for Disassembly Diagnoser, #437 (by @adamsitnik)
- 13732b added asm report with navigation (by @adamsitnik)
- 33ee03 fix type of local in EmitInvokeMultipleBody (by @pentp)
- 7d943f Merge pull request #532 from pentp/master (by @adamsitnik)
- 4d173d RyuJit 32bit support for .NET Core, fixes #310, fixes #533 (by @adamsitnik)
- 5f5237 test fix (set platform in explicit way to avoid lack of 32-bit .NET Core sdk ... (by @adamsitnik)
- f359c9 allow the users to set custom RuntimeFrameworkVersion, fixes #535 (by @adamsitnik)
- 264150 disassembler: print the results in machine code order, not il, part of #536 (by @adamsitnik)
- 0088bd Detecting virtual machine hypervisor, #167 (#527) (by @lukasz-pyrzyk)
- 007444 print all returns (maps with negative ILOffset are not always prolog or epilo... (by @adamsitnik)
- aebc32 empty methods for LegacyJit64 have only maps with negative ILOffset, #536 (by @adamsitnik)
- ba7489 docs for Toolchains, closes #537 (by @adamsitnik)
- 8c4f53 allow the users to specify custom build configuration, #466, close #528 (by @adamsitnik)
- eb80b2 Environment Variables support, #262 (by @adamsitnik)
- ab7045 test fixes ;) (by @adamsitnik)
- 455c60 allow the users to specify custom arguments (Mono, MsBuild), #466, #262 (by @adamsitnik)
- e03384 make sure that all new custom settings are presented in human friendly way, #262 (by @adamsitnik)
- cc8d07 enforce TreatWarningsAsErrors=False in auto-generated csproj to override glob... (by @adamsitnik)
- 97ab49 target .NET Core 2.0 to take full advantage of the new API, fixes #539 (by @adamsitnik)
- 8b2c7e check if reference assemblies are installed when choosing the default .NET fr... (by @adamsitnik)
- feabd1 bump the .NET Core version, #539 (by @adamsitnik)
- a21f86 for .NET Core 1.1 we should run only the Backward Compatibility tests. #539 (by @adamsitnik)
- b7a966 typo fix (by @adamsitnik)
- 73a30a docs: Customizing Mono, Env Variables & minor updates, fixes #262 (by @adamsitnik)
- 612b41 exclude Artifacts for disassembler projects, fixes #540 (by @adamsitnik)
- 360326 typo, #540 (by @adamsitnik)
- f3e4ae show nice error when Job.Dry is used for Disassembler, fixes #542 (by @adamsitnik)
- c6bbda allow to specify custom dotnet cli path to compare RyuJit 32 vs 64 for .NET C... (by @adamsitnik)
- a0c7e5 Add info about Redstone 3,4 in WindowsBrandVersions (by @AndreyAkinshin)
- d42262 Additional info about WindowsBrandVersions (by @AndreyAkinshin)
- cd0a1f Improve formatting in WindowsBrandVersions (by @AndreyAkinshin)
- 1cd844 Fix OsBrandStringTests.WindowsIsPrettified (by @AndreyAkinshin)
- f00787 Fix markdown headers (by @jawn)
- 363814 Merge pull request #547 from jawn/patch-1 (by @adamsitnik)
- 405c4c Update dotnet cli version from 1.0.4 to 2.0.0 for non-Windows system. (#548) (by @Ky7m)
- 97a9b2 Fix compiler warning connected to problem with the XML tag. (by @Ky7m)
- 24585d Remove PackageTargetFallback element. (by @Ky7m)
- 174c19 Merge pull request #549 from Ky7m/csproj-files-cleanup (by @AndreyAkinshin)
- 84a4e2 Fix exporters to use fully qualified filenames (#552), fixes #529 (by @Teknikaali)
- a7578a disable Disassembler tests for non-Windows OS, fixes #555 (by @adamsitnik)
- a147dd Remove leading space character in a MD table row, fixes #556 (by @rolshevsky)
- 9c194c DisassemblyDiagnoser crashes on overloaded benchmark, fixes #562 (by @adamsitnik)
- 9076a6 give users nice warning when they run into shadow copy issues, fixes #558 (by @adamsitnik)
- 1670ca the build fix ;) (by @adamsitnik)
- d5854d Include UBR in Windows versions (by @AndreyAkinshin)
- 1fcfee display correct runtime info in exported disassembly result, fixes #559 (by @adamsitnik)
- de45ad Single point of full config creation (#565) (by @ig-sinicyn)
- 395a52 make sure filters don't exclude Setup/Cleanup methods, fixes #564 (by @adamsitnik)
- 4276ac fail when running benchmarks in Debug with DefaultConfig, fixes #561 (by @adamsitnik)
- 0145f8 Fix build number for Windows 10 Fall Creators Update (by @AndreyAkinshin)
- 7f7a7c Update cakebuild scripts (#569) (by @Ky7m)
- cff577 introduce ParamsSource attribute, fixes #350, part of #256 (by @adamsitnik)
- 3af915 introduce IParam to support complex, not-compile time constants as parameters... (by @adamsitnik)
- 4a877f build the disassemblers before .Core, but don't add the dependency to them to... (by @adamsitnik)
- 188850 specify all the embedded resources in explicit way to avoid some crazy MSBuil... (by @adamsitnik)
- b5fbbf Typo fix (by @AndreyAkinshin)
- eb90ce Update message in JitOptimizationsValidator (by @AndreyAkinshin)
- 6c1137 Updated DotSettings (by @AndreyAkinshin)
- 3d0dfe Set library version: 0.10.10 (by @AndreyAkinshin)
Contributors (12)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Andrey Dorokhov (@aidmsu)
- Anssi Kettunen (@Teknikaali)
- Bernard Vander Beken (@jawn)
- Ian Johnson (@ipjohnson)
- ig-sinicyn (@ig-sinicyn)
- Igor Fesenko (@Ky7m)
- Jiri Cincura
- Łukasz Pyrzyk (@lukasz-pyrzyk)
- Pent Ploompuu (@pentp)
- Rostislav Olshevsky (@rolshevsky)
Thank you very much!
Additional details
Date: November 03, 2017
Milestone: v0.10.10 (List of commits)
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.10
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.10
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.10
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.10
BenchmarkDotNet v0.10.9
- Migrate from custom build scripts to Cake (C# Make) (#426, #475, thanks @Ky7m)
- Target Setup methods for specific Benchmarks (#469, #501, thanks @ipjohnson)
- Many improvements in XmlExporter (#476, #488, thanks @Teknikaali)
- Add MemoryDiagnoser results to JsonExporter output (#453, #478, thanks @Teknikaali)
- Detect correct version of .NET Core (+ improved presentation for information about runtime) (#448, ed586585...ed586585)
- Fix UnauthorizedAccessException (#380, #390, #490, #491, 8505abb5)
- Fix app.config generation (#499, dc6dc411)
- Fix incorrect order of IterationCleanup and Benchmark jitting (#481, #503)
- Fix test scripts for MacOS+zsh (1177c8)
- Unix-related ProcessorAffinity fixes (#474, 26d44411)
- Minor fixes in docs (#465, #467, #473, #480, #483, thanks @mtschneiders, @davkean, @aarondandy, @AmadeusW)
- Temporary hacks for appveyor connectivity incident (#497, #506)
- Additional warnings for incorrect Configs (#482, eb84825f)
- Additional warnings for F# methods with spaces (#479, 3c2c8dec, 7ba1c809, 3ca39afe)
Milestone details
In the v0.10.9 scope, 13 issues were resolved and 14 pull requests were merged. This release includes 37 commits by 10 contributors.
Resolved issues (13)
- #380 Problem running benchmark due to "could not copy" during build (assignee: @adamsitnik)
- #390 Crashing benchmark (assignee: @adamsitnik)
- #426 Migrate from custom build scripts to Cake (C# Make)
- #448 Detect correct version of .NET Core (assignee: @AndreyAkinshin)
- #453 MemoryDiagnoser and JsonExporter
- #469 [Suggestion] Specify Setup per benchmark (assignee: @AndreyAkinshin)
- #474 PlatformNotSupportedException when reading ProcessorAffinity on non-Windows platforms (assignee: @AndreyAkinshin)
- #479 Invalid C# code generated for valid F# identifiers (assignee: @adamsitnik)
- #481 Iteration cleanup runs before the benchmark (assignee: @AndreyAkinshin)
- #482 Benchmark seems to hang when no logger is defined (assignee: @adamsitnik)
- #490 BDN.Generated.exe is locking files when killed with ctrl+c (assignee: @adamsitnik)
- #491 UnauthorizedAccessException preventing report to be written (assignee: @adamsitnik)
- #499 Opting into app-compat switches in a benchmark doesn't work (assignee: @adamsitnik)
Merged pull requests (14)
- #465 Small correction in Filters.md (by @mtschneiders)
- #467 Small improvements to FAQ.md (by @mtschneiders)
- #471 Corrected typos in Filters.md and IntroFilters.cs (by @mtschneiders)
- #473 Adds ISummaryStyle information to the Exporters guide (by @AmadeusW)
- #475 Cake (C# Make) integration. Migration from custom build scripts. (by @Ky7m)
- #476 Improve Xml exporter's discoverability (by @Teknikaali)
- #478 Add MemoryDiagnoser results to JsonExporter output (by @Teknikaali)
- #480 Fix links to Overview/FAQ (by @davkean)
- #483 Update jobs docs (by @aarondandy)
- #488 Improve XmlExporter (by @Teknikaali)
- #497 Add temporary solution to address connectivity issues to nuget.org (by @Ky7m)
- #501 Target Setup methods for specific Benchmarks (by @ipjohnson)
- #503 Make sure IterationCleanup is run after Jitting (by @smitpatel)
- #506 Removes a temporary solution related to connectivity issues to nuget (by @Ky7m)
Commits (37)
- 0b5657 Small correction in comments (by @mtschneiders)
- b1ad2c Merge pull request #465 from mtschneiders/patch-1 (by @adamsitnik)
- 3bb154 Small corrections to FAQ.md (by @mtschneiders)
- 1a8559 Merge pull request #467 from mtschneiders/patch-2 (by @adamsitnik)
- fc4dfe Corrected typos in Filters.md and IntroFilters.cs (by @mtschneiders)
- cb5072 Remove UpgradeLog.htm (by @AndreyAkinshin)
- 7013bd Adds ISummaryStyle information to the Exporters guide (by @AmadeusW)
- 345af7 wording (by @AmadeusW)
- a114ea Merge pull request #473 from AmadeusW/docs/exporters (by @adamsitnik)
- 26d444 Unix-related ProcessorAffinity fixes (fix #474) (by @AndreyAkinshin)
- 2d8a53 Improve Xml exporter's discoverability (#476) (by @Teknikaali)
- baebf9 Add MemoryDiagnoser results to JsonExporter output (#478) (by @Teknikaali)
- 32993c Fix links to Overview/FAQ (by @davkean)
- 8e712c Merge pull request #480 from davkean/FixLinks (by @adamsitnik)
- 43405d Update jobs docs (by @aarondandy)
- 1bacac Merge pull request #483 from aarondandy/docs-changes (by @adamsitnik)
- 3c2c8d print nice error for F# methods that contain whitespaces, fixes #479 (by @adamsitnik)
- 7ba1c8 post code review #479 (by @adamsitnik)
- 3ca39a even more post code review #479 (by @adamsitnik)
- eb8482 warn the users if no logger, columns or exporters were defined, fixes #482 (by @adamsitnik)
- 8505ab unique file names by default, are removed after printing the results, fix #49... (by @adamsitnik)
- 3e74aa Improve XmlExporter (#488) (by @Teknikaali)
- 6e2577 Cake (C# Make) integration. Migration from custom build scripts. (#475) (by @Ky7m)
- 6e6fcc Add temporary solution to address connectivity issues to nuget.org https://ap... (by @Ky7m)
- dc6dc4 all runtime settings, that do not belong to Job must be rewritten by default ... (by @adamsitnik)
- ed5865 Rename "dotnet cli version" to ".NET Core SDK", see #448 (by @AndreyAkinshin)
- 857f2b Detecting the correct version of .NET Core, fixing #448 (by @AndreyAkinshin)
- 7ec001 Don't print information about unknown timers in HostEnvironmentInfo (by @AndreyAkinshin)
- 4c3c82 Add missing space in HostRuntimeInfo (by @AndreyAkinshin)
- da8226 Print actual information about .NET Framework version in summary, see #448 (by @AndreyAkinshin)
- cea199 Fix MultipleRuntimesTest.SingleBenchmarkCanBeExecutedForMultpleRuntimes (by @AndreyAkinshin)
- db56bc Make sure IterationCleanup is run after Jitting (by @smitpatel)
- 3df90f Merge pull request #503 from smitpatel/orderingissue (by @adamsitnik)
- 1177c8 Improve tests/runCoreTests.sh (by @AndreyAkinshin)
- 976900 Removes a temporary solution related to connectivity issues to nuget.org http... (by @Ky7m)
- 557246 Target Setup methods for specific Benchmarks (#501) (by @ipjohnson)
- 80d70a Set library version: 0.10.9 (by @AndreyAkinshin)
Contributors (10)
- Aaron Dandy (@aarondandy)
- Adam Sitnik (@adamsitnik)
- Amadeusz Wieczorek (@AmadeusW)
- Andrey Akinshin (@AndreyAkinshin)
- Anssi Kettunen (@Teknikaali)
- David Kean (@davkean)
- Ian Johnson (@ipjohnson)
- Igor Fesenko (@Ky7m)
- Mateus Artur Schneiders (@mtschneiders)
- Smit Patel (@smitpatel)
Thank you very much!
Additional details
Date: July 28, 2017
Milestone: v0.10.9
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.9
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.9
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.9
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.9
BenchmarkDotNet v0.10.8
- Legend for time units (#349, #459, f14e508e)
- XML exporter (#157, #452, a0148db8)
- .NET Framework 4.7 support (#461, 3f2b5c3c, 5513873a)
- Public API for AllocationQuantum (#450, #462, a0148db8)
Milestone details
In the v0.10.8 scope, 5 issues were resolved and 3 pull requests were merged. This release includes 8 commits by 4 contributors.
Resolved issues (5)
- #157 Implement export to xml
- #349 What the report title and value means? (assignee: @AndreyAkinshin)
- #450 [Minor feature request] Please make GcStats.AllocationQuantum public
- #459 [Question] What does the unit of measurement us stand for
- #461 .NET Framework 4.7 support (assignee: @adamsitnik)
Merged pull requests (3)
- #452 Feature: XML Exporter (by @Teknikaali)
- #455 Wrong xml doc comment (by @ig-sinicyn)
- #462 make allocation quantum public, deal with a spelling error and expose… (by @RichLinnell)
Commits (8)
- f14e50 Add legend for time units (by @AndreyAkinshin)
- e59550 Add info about OrderProviders in docs (by @AndreyAkinshin)
- 6fc245 Fix ConfigPassingTest (by @AndreyAkinshin)
- ef0583 Feature: XML Exporter (#452) (by @Teknikaali)
- 3f2b5c .NET 4.7 support from .NET Core host process on Windows, fixes #461 (by @adamsitnik)
- a0148d make allocation quantum public, deal with a spelling error and expose allocat... (by @RichLinnell)
- 551387 add Windows check to our CsProjClassicNetToolchain (by @adamsitnik)
- 971565 Set library version: 0.10.8 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Anssi Kettunen (@Teknikaali)
- Rich Linnell (@RichLinnell)
Thank you very much!
Additional details
Date: June 09, 2017
Milestone: v0.10.8
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.8
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.8
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.8
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.8
BenchmarkDotNet v0.10.7
- LINQPad support (5.22.05+) (#66, #445)
- Benchmark filters and categories (#248)
- Updated setup/cleanup attributes:
[GlobalSetup]
,[GlobalCleanup]
,[IterationSetup]
,[IterationCleanup]
(#270, #274, #325, #456) - Better Value Types support (afa803d0)
- Building Sources on Linux: it's possible to build the solution (with unloaded F#/VB projects), run samples (for both net46/netcoreapp1.1), run unit tests (for netcoreapp1.1 only)
- Fix minor bugs in
JsonExporter
(#451)
Milestone details
In the v0.10.7 scope, 6 issues were resolved and 1 pull requests were merged. This release includes 24 commits by 4 contributors.
Resolved issues (6)
- #66 Friendliness to LinqPad (assignee: @adamsitnik)
- #248 Support a "category" attribute for selecting benchmarks (assignee: @AndreyAkinshin)
- #270 Add support for Cleanup and Setup between benchmarks (assignee: @AndreyAkinshin)
- #274 Support for run-once Setup and Clean-up with Parameters available (assignee: @AndreyAkinshin)
- #325 Setup & Cleanup versions of attribute which would run before/after each benchmark iteration (assignee: @AndreyAkinshin)
- #445 Missing reference to Microsoft.CodeAnalysis.CSharp when using BenchmarkDotNet in Linqpad (assignee: @adamsitnik)
Merged pull requests (1)
- #451 Fix minor bugs in JsonExporter (by @Teknikaali)
Commits (24)
- a54645 handle the LINQPad shadow copying, #445, #66 (by @adamsitnik)
- fe3032 Add Filters (by @AndreyAkinshin)
- 2e7427 Add categories (by @AndreyAkinshin)
- f96346 Add categories filters (by @AndreyAkinshin)
- 34f808 Support category filters in BenchmarkSwitcher (by @AndreyAkinshin)
- 786afe Implement join mode in BenchmarkSwitcher (by @AndreyAkinshin)
- a77a77 Post code review changes (by @AndreyAkinshin)
- cc7006 Fix minor bugs in JsonExporter (#451) (by @Teknikaali)
- 4dd789 Rename Setup/Cleanup to GlobalSetup/GlobalCleanup (by @AndreyAkinshin)
- 21369c Introduce IterationSetup/IterationCleanup (by @AndreyAkinshin)
- 0e9be7 Add IterationSetupCleanupAnalyser (by @AndreyAkinshin)
- 4f3703 docs: update structure (by @AndreyAkinshin)
- 5fe564 docs: add info about RunStrategy.Monitoring and new Setup/Cleanup attributes (by @AndreyAkinshin)
- 87ce0f Mark ProcessPropertiesTests as WindowsOnly (by @AndreyAkinshin)
- 7e479e Fix typo in File_StreamVsMemoryMapperVewStream.cs (by @AndreyAkinshin)
- 975514 Wrong xml doc comment (by @ig-sinicyn)
- 165b13 Merge pull request #455 from ig-sinicyn/patch-1 (by @adamsitnik)
- afa803 better Value Types support (by @adamsitnik)
- d16ddb workaround for weird AppVeyor behavior (by @adamsitnik)
- 9f3d68 support recursive nesting for returned types (by @adamsitnik)
- b7668e Add tests/runCoreTests.sh (by @AndreyAkinshin)
- 3cceb6 runCoreTests.sh: fix output file for integration-tests (by @AndreyAkinshin)
- a21421 Make some tests Windows-only (by @AndreyAkinshin)
- 00a156 Set library version: 0.10.7 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Anssi Kettunen (@Teknikaali)
- ig-sinicyn (@ig-sinicyn)
Thank you very much!
Additional details
Date: June 05, 2017
Milestone: v0.10.7
Overview post: https://aakinshin.net/posts/bdn-v0_10_7/
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.7
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.7
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.7
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.7
BenchmarkDotNet v0.10.6
- Removed buggy allocation from Engine which was spoiling the results of MemoryDiagnoser for micro benchmarks. This part of the code is now guarded with very strict integration tests, it should never happen again. We now also exclude the side effects of the Allocation Quantum. This bug was serious, you must update to
0.10.6
(#439) - Support of the
PackageTargetFallback
setting which allows to reference components that target old framework monikers (likedotnet5.4
orportable-net45+win8
) (#438) - Added
InstructionRetiredPerCycleColumn
which shows up automatically whenHardwareCounter.InstructionRetired
andHardwareCounter.TotalCycles
are used. - Support benchmark classes without namespace (#446)
- Fix problem with RPlotExporter and quoted directories in %PATH% (#446)
- Show Windows brand version in summary
Milestone details
In the v0.10.6 scope, 3 issues were resolved and 1 pull requests were merged. This release includes 11 commits by 3 contributors.
Resolved issues (3)
- #438 Need to Update Autogenerated csproj file (assignee: @adamsitnik)
- #439 Question - This benchmark apparently allocates, but why? (assignee: @adamsitnik)
- #446 ArgumentNullException if RPlotExporter is used (assignee: @AndreyAkinshin)
Merged pull requests (1)
- #444 Added line separator at the end in JsonExporters (by @alinasmirnova)
Commits (11)
- 3c1f09 copy the PackageTargetFallback setting if present in csproj to support older ... (by @adamsitnik)
- ffab7d remove allocation from Engine, make sure tests detect breaking change in the ... (by @adamsitnik)
- 7c9a0f consider Allocation Quantum side effects to have correct results for micro be... (by @adamsitnik)
- 4af5f3 Added line separator in JsonExporters (by @alinasmirnova)
- 8ac913 added Instruction Retired per Cycle (IPC) to the predefined columns for Pmc D... (by @adamsitnik)
- 0898c3 post code review changes (by @adamsitnik)
- b4d68e 'kB' -> 'KB' (by @AndreyAkinshin)
- 23bd4f Handle null values in CsvHelper.Escape (by @AndreyAkinshin)
- 77ed63 RPlotExporter.FindInPath: handle exceptions, trim quotes #446 (by @AndreyAkinshin)
- 626e3a Show Windows brand versions in summary (by @AndreyAkinshin)
- 247634 Set library version: 0.10.6 (by @AndreyAkinshin)
Contributors (3)
- Adam Sitnik (@adamsitnik)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
Additional details
Date: May 12, 2017
Milestone: v0.10.6
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.6
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.6
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.6
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.6
BenchmarkDotNet v0.10.5
- Fixed SizeUnit presentation in the summary table (#434)
- In MemoryDiagnoser, now 1kB = 1024B (instead of 1000 in v0.10.4) (#434)
- Fix false allocations detection (#436 9b44de70)
- Hide ScaledSD column for small values (da857ad7)
- Autoselecting amount of digits after the decimal point (#404)
Milestone details
In the v0.10.5 scope, 3 issues were resolved and 2 pull requests were merged. This release includes 16 commits by 4 contributors.
Resolved issues (3)
- #404 Autoselecting amount of digits after the decimal point (assignee: @AndreyAkinshin)
- #428 Cleanup NuGet.Config (assignee: @adamsitnik)
- #434 Allocation output suddenly is 0 GB (assignee: @AndreyAkinshin)
Merged pull requests (2)
- #435 Joined approved files according to cultures (by @alinasmirnova)
- #436 Fix false allocations detection (by @ig-sinicyn)
Commits (16)
- d9eefd NuGet feeds cleanup, fixes #428 (by @adamsitnik)
- 2a95b0 Fix SizeUnit presentation, fixes #434 (by @AndreyAkinshin)
- 8eca28 Add a note about kilobytes in docs (by @AndreyAkinshin)
- ae483e Separate approved files only for cultures, not for exporters (by @alinasmirnova)
- 78a6a0 Improved legend for MemoryDiagnoser (by @AndreyAkinshin)
- 47ae20 SizeUnitTests (by @AndreyAkinshin)
- 9b44de fix false allocations detection (by @ig-sinicyn)
- ffd535 Merge pull request #436 from ig-sinicyn/fix_allocations_on_run (by @adamsitnik)
- 87c2bd Inclusive ConfidenceInterval.Contains (by @AndreyAkinshin)
- da857a Don't show the ScaledSD column if values are small (by @AndreyAkinshin)
- e0cf24 Add DefaultColumnProvidersTests (by @AndreyAkinshin)
- f2baa3 Fix typo in DefaultColumnProvidersTests (by @AndreyAkinshin)
- 117560 Fix BaselineScaledColumnTest.ColumnsWithBaselineGetsScaled (by @AndreyAkinshin)
- 3a1fb7 Implement BestAmountOfDecimalDigits for statistics columns in SummaryTable, f... (by @AndreyAkinshin)
- 4201ee Fix ToolchainTest.CustomToolchainsAreSupported (by @AndreyAkinshin)
- cba245 Set library version: 0.10.5 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin (@AndreyAkinshin)
- ig-sinicyn (@ig-sinicyn)
Thank you very much!
Additional details
Date: April 26, 2017
Milestone: v0.10.5
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.5
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.5
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.5
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.5
BenchmarkDotNet v0.10.4
- New logo
- Update to Roslyn 2.0, drop .NET 4.5 support (#303)
- Initial support of HardwareCounters (Windows only)
- Initial experimental support of in-process benchmarks
- Optional configs for
BenchmarkSwitcher
(#391, #392) - Host API interface (#356)
- Improved measurements for async benchmarks (#415)
- Improved precision level (MinIterationTimes is 500ms instead of 200ms; introduced
AccuracyMode.MaxAbsoluteError
andAccuracyMode.MaxRelativeError
instead ofAccuracyMode.MaxStdErrRelative
; logic which select amount of iterations uses confidence intervals instead of standard errors; the Error column (half of CI99.9%) is shown by default instead of StdErr) - Introduced
ISummaryStyle
, raw data in CSV reports (#118, #146, #396) - Handle cases when report files are existed and locked (#414, #416)
- MarkdownExporter right-justifies numeric columns (#421)
- Better colors for console output (#376)
- Column legends
- Add information about CPU microarchitecture for well-known processors to summary
- Fix AssemblyInformationalVersionAttribute (#382)
- Fix incorrect method filtering in BenchmarkSwitcher (#365)
- Fix OS Version in Summary for Windows 10 (#351)
- Fix OS Version on Mono
- Fix --class and --method filtering (#249)
- Fix --exporters option (#189)
- Fix escaping logic in CsvExporter (#294, #409)
- Fix MacOS detection
- Minor bugfixes and API improvements
Milestone details
In the v0.10.4 scope, 23 issues were resolved and 14 pull requests were merged. This release includes 103 commits by 9 contributors.
Resolved issues (23)
- #118 Raw data in CSV reports (assignee: @AmadeusW)
- #146 Ability to specify units / easier comparison (assignee: @AmadeusW)
- #159 Warn user if no Columns were defined (assignee: @adamsitnik)
- #189 --exporters option appears not to be working (assignee: @adamsitnik)
- #249 --class and --method should combine as "AND" filtering (assignee: @adamsitnik)
- #294 [Suggestion] CSVHelper.Escape() method should check for actual separator value (assignee: @alinasmirnova)
- #303 Update to Roslyn 2.0 when RTM is shipped to nuget.org (assignee: @adamsitnik)
- #351 Fix OS Version in Summary for Windows 10 (assignee: @adamsitnik)
- #352 Troubles with CoreJob on Linux (assignee: @adamsitnik)
- #365 [Minor bug] Benchmark switcher: incorrect method filtering (assignee: @adamsitnik)
- #376 Pick better background colors for output (assignee: @AndreyAkinshin)
- #382 AssemblyInformationalVersion doesn't work (assignee: @AndreyAkinshin)
- #388 Precise Machine Counter Diagnoser (assignee: @adamsitnik)
- #391 BenchmarkSwitcher should take an optinal IConfig
- #393 Troubles with ClrJob in .NET Core applications (assignee: @adamsitnik)
- #395 Could not load file or assembly 'System.Reflection.Metadata' (assignee: @adamsitnik)
- #401 Exceptions in Roslyn.Builder (assignee: @adamsitnik)
- #406 BenchmarkDotNet with netcoreapp2.0 requires using RuntimeFrameworkVersion directly in the project file (assignee: @adamsitnik)
- #410 Troubles with Classic applications on nightly BenchmarkDotNet (assignee: @adamsitnik)
- #412 HardwareCounter.InstructionRetired failing with ArgumentNullException. Build 82 (assignee: @adamsitnik)
- #415 Allocations for async methods measures BenchmarkDotNet (assignee: @adamsitnik)
- #419 Suspicious warnings about MemoryMappedFiles (assignee: @adamsitnik)
- #424 Make InliningDiagnoser filtering more flexible (assignee: @adamsitnik)
Merged pull requests (14)
- #356 Feature: host API interface (by @ig-sinicyn)
- #379 Feature: in-process benchmarks (by @ig-sinicyn)
- #392 Add an optional config to BenchmarkSwitcher. (by @ILMTitan)
- #396 Allow users to pick, show and hide measurement units in the reports and exports. (by @AmadeusW)
- #400 fix spelling error: misspredict => mispredict (by @SteveDesmond-ca)
- #405 Make RoslynToolchain types public (by @cdmihai)
- #407 Propagate benchmark to hooks (by @cdmihai)
- #408 Small fixes before approval tests (by @alinasmirnova)
- #409 CSVHelper.Escape() method should check for actual separator value (by @alinasmirnova)
- #416 Exports file to temporary location if target is locked (by @AmadeusW)
- #421 MarkdownExporter right-justifies numeric columns (by @SteveDesmond-ca)
- #423 Updated Microsoft.Net.Test.Sdk (by @alinasmirnova)
- #430 Fix unix OS detection. (by @mfilippov)
- #432 Fix macOS detection (by @mfilippov)
Commits (103)
- bd790c Simplify BenchmarkDotNet.IntegrationTests.Classic.ReferencesTests (by @AndreyAkinshin)
- bf9f4e Feature: host API interface (by @ig-sinicyn)
- f85ffe Merge pull request #356 from ig-sinicyn/feature-host-api (by @AndreyAkinshin)
- 8ffff0 Feature: in-process benchmarks (by @ig-sinicyn)
- 51fc0c Feature: in-process benchmarks, FixAffinity() helper (by @ig-sinicyn)
- c5179f Feature: in-process benchmarks, review fixes (by @ig-sinicyn)
- 6c5990 Feature: in-process benchmarks, review fixes, part 2 (by @ig-sinicyn)
- c6b046 Feature: in-process benchmarks, STA & priority on full .Net FW (by @ig-sinicyn)
- cc2c89 Feature: in-process benchmarks, env validation in toolchain, intro example ad... (by @ig-sinicyn)
- 101a80 Improved versioning system (by @AndreyAkinshin)
- 846532 Update links to appveyor (by @AndreyAkinshin)
- 5464e4 Improved versioning system, part 2 (by @AndreyAkinshin)
- e39a50 Merge pull request #379 from ig-sinicyn/feature-inprocess (by @adamsitnik)
- ae4cc8 AssemblyInformationalVersion fix in common.props, resolves #382 (by @AndreyAkinshin)
- d036f9 Precise Machine Counter Diagnoser #388 (by @adamsitnik)
- 390442 Improved invocationCount behavior in SimpleJobAttribute (by @AndreyAkinshin)
- 7b61ed add possibility to set Hardware Counters per class in runtime-independent way... (by @adamsitnik)
- 6e208c Add an optional config to BenchmarkSwitcher. (by ILMTitan)
- 935d23 Merge pull request #392 from ILMTitan/master (by @adamsitnik)
- 6b9a88 update to Roslyn 2.0, drop .NET 4.5 support, fixes #303 (by @adamsitnik)
- ea4c55 BenchmarkDotNet.IntegrationTests.csproj: fix formatting (by @AndreyAkinshin)
- 20a537 Update year in LICENSE.md (by @AndreyAkinshin)
- 878796 Update logo (by @AndreyAkinshin)
- faba77 Update README.md (by @AndreyAkinshin)
- 6dce74 Update logo in README.md (by @AndreyAkinshin)
- 7a750f Another fix in README.md (by @AndreyAkinshin)
- 1caa0d fix spelling error: misspredict => mispredict (by @SteveDesmond-ca)
- 742912 use Array.Empty and Task.Completed (after upgrading to .NET 4.6) (by @adamsitnik)
- 0dafac there is no need to set up
with latest VS, fixes #393 (by @adamsitnik) - f5d88e Catch exceptions in BenchmarkDotNet.Running.BenchmarkRunnerCore.Run (by @AndreyAkinshin)
- fa176f Merge pull request #400 from stevedesmond-ca/missspelling (by @AndreyAkinshin)
- 90c3b1 Docs improvements (by @AndreyAkinshin)
- 84c524 Mark SimpleJobAttribute with AllowMultiple (by @AndreyAkinshin)
- 531804 Update README.md (by @AndreyAkinshin)
- 7f2221 Make RoslynToolchain types public (#405) (by @cdmihai)
- be8c33 Improved confidence intervals (by @AndreyAkinshin)
- 767811 Propagate benchmark to hooks (#407) (by @cdmihai)
- ec5e54 All exporters should not use static environment info (by @alinasmirnova)
- 2b8a9e Culculate csv separator when it is needed, not in constructor (by @alinasmirnova)
- 95aeb5 clean up (by @alinasmirnova)
- 2e74c2 Name field for all exporters (by @alinasmirnova)
- badb0b Merge pull request #408 from alinasmirnova/small-fixes (by @AndreyAkinshin)
- 9da9ca search for .NET Core 2.0 settings in imported props files, fixes #406 (by @adamsitnik)
- 2b08c5 filter sealed, generic and abstract classes from BenchmarkSwitcher, fixes #365 (by @adamsitnik)
- 14ad55 print correct OS version in summary, fixes #351 (by @adamsitnik)
- b86f48 BenchmarkDotNet does not support running .NET Core benchmarks when host proce... (by @adamsitnik)
- 11b51b refactoring in TypeParser (by @adamsitnik)
- 8047a7 use AND when filtering with args from command line, fixes #249 (by @adamsitnik)
- 3cf8d8 handle cmd line arguments without '=', fixes #189 (by @adamsitnik)
- cdc71f test fix after recent changes, #249 (by @adamsitnik)
- 97c211 detect situation when users want to use Hardware Counters with InProcessToolc... (by @adamsitnik)
- ba972b Warn user if no Columns were defined, fixes #159 (by @adamsitnik)
- 2520f2 migrate old csprojs to the new format to get the tests running in common way,... (by @adamsitnik)
- dd1b4d Improvements in StatisticsTests (by @AndreyAkinshin)
- 07d149 emptyEnumerable.All(whatever) returns true (by @adamsitnik)
- 0d61a7 improve dynamic diagnoser loading (case when diagnosers NuGet pacakge is inst... (by @adamsitnik)
- 5a6937 Ignore BenchmarkProject.json in BenchmarkDotNet.sln.DotSettings (by @AndreyAkinshin)
- 5895c4 Improvements in TypeParserTests (by @AndreyAkinshin)
- 1124ae BenchmarkDotNet.Tests: cleanup (by @AndreyAkinshin)
- d37ef4 CSVHelper.Escape() method should check for actual separator value (by @alinasmirnova)
- 43643c move hardwareCounters from Job to Config, fixes #412 (by @adamsitnik)
- 303fff pass config from runner => executor => diagnoser #412 (by @adamsitnik)
- 5b432e Addded approval tests for exporters (by @alinasmirnova)
- ac6507 Added more info in mock summary (by @alinasmirnova)
- a59b17 MockEnvironmentInfo for approval tests (by @alinasmirnova)
- 610f3b Awaiting Tasks should not interfere allocation results, fixes #415 (by @adamsitnik)
- cf16f6 I forgot about aligning, #415 (by @adamsitnik)
- 2860d2 help the .NET framework to resolve assemblies when binding redirects are miss... (by @adamsitnik)
- e7ad36 don't log false alarms, fixes #419 (by @adamsitnik)
- 803081 Allow users to pick, show and hide measurement units in the reports and expor... (by @AmadeusW)
- fa3128 Exports file to temporary location if target is locked (#416) (by @AmadeusW)
- c923ba MarkdownExporter right-justifies numeric columns (#421) (by @SteveDesmond-ca)
- aa290d Add column legends (by @AndreyAkinshin)
- 8d8db5 Handle case when there are no columns with legends (by @AndreyAkinshin)
- dc201c Add empty line before legends (by @AndreyAkinshin)
- ff7fc9 Approved files (by @alinasmirnova)
- 3f6372 Updated Microsoft.Net.Test.Sdk (by @alinasmirnova)
- 7d23d1 Merge remote-tracking branch 'upstream/master' (by @alinasmirnova)
- 57cbbb Merge branch 'new-test-sdk-version' (by @alinasmirnova)
- c0c563 Updated Microsoft.Net.Test.Sdk (by @alinasmirnova)
- 539834 Updated spproved files according last changes in md exporter (by @alinasmirnova)
- f117f0 Added *.received and *.orig in .gitignore (by @alinasmirnova)
- 0d7e72 Make InliningDiagnoser filtering more flexible, fixes #424 (by @adamsitnik)
- d25eb0 allow to set InProcessToolchain via attribute /cc @ig-sinicyn (by @adamsitnik)
- 8cf041 Mock strings in mock environment info (by @alinasmirnova)
- 0db804 Changed file naming in approval files (by @alinasmirnova)
- 29aeaf correct Idle implementation for Task-returning benchmarks, fixes #418 (by @adamsitnik)
- c81aa5 the missing docs for Hardware Counters, fixes #388 (by @adamsitnik)
- 6076e2 Improved precision (by @AndreyAkinshin)
- 72b3a6 Show "NA" for statistic columns with double.NaN values (by @AndreyAkinshin)
- ea2222 Processor brand string prettifying (by @AndreyAkinshin)
- 678d43 Added approval files info links to docs (by @alinasmirnova)
- 33911c Merge remote-tracking branch 'upstream/master' (by @alinasmirnova)
- d4c928 Fixed approval tests according to recent changes in master (by @alinasmirnova)
- eb9f4f Fix typos in docs (by @AndreyAkinshin)
- 271b27 Merge pull request #348 from alinasmirnova/master (by @AndreyAkinshin)
- 152f3e Parsing Gulftown processor brand strings (by @AndreyAkinshin)
- 74d793 Minor improvements in docs (by @AndreyAkinshin)
- 764bd3 Minor improvements in docs, part 2 (by @AndreyAkinshin)
- 0a251b Fix unix OS detection. (by @mfilippov)
- 5c3b39 Fix typo in PlatformID (by @mfilippov)
- 7f3d06 Always use PlatformAbstractions in RuntimeInformation.GetOsVersion() (by @AndreyAkinshin)
- 46d34f Set library version: 0.10.4 (by @AndreyAkinshin)
Contributors (9)
- Adam Sitnik (@adamsitnik)
- Alina Smirnova (@alinasmirnova)
- Amadeusz Wieczorek (@AmadeusW)
- Andrey Akinshin (@AndreyAkinshin)
- ig-sinicyn (@ig-sinicyn)
- ILMTitan
- Mihai Codoban (@cdmihai)
- Mikhail Filippov (@mfilippov)
- Steve Desmond (@SteveDesmond-ca)
Thank you very much!
Additional details
Date: April 21, 2017
Milestone: v0.10.4
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.4
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.4
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.4
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.4
BenchmarkDotNet v0.10.3
- New .csprojs support for .NET Core. Also for F# (#366)!
- New plots and RPlotExporter (density plots for each job; cumulative mean plots)
- Fixed exporter order (now RPlotExporer uses the actual measurements instead of previous version)
- Xplat improvments in RuntimeInformation
- Introduced
RunStrategy.Monitoring
- Possibility to set custom path for Mono (#306)
- Possibility to set any .NET Core version >= 1.1 (#336)
- MemoryDiagnoser is now disabled by default (Breaking changes!!) (#369)
Milestone details
In the v0.10.3 scope, 10 issues were resolved and 2 pull requests were merged. This release includes 79 commits by 3 contributors.
Resolved issues (10)
- #300 Switch back from project.json and xproj to csproj, support dotnet cli preview 3 (assignee: @adamsitnik)
- #306 Custom path for mono (assignee: @adamsitnik)
- #320 Results table should be a GitHub Flavored Markdown table (assignee: @alinasmirnova)
- #322 First benchmark always fails when running on .NET Core with -c release (assignee: @adamsitnik)
- #336 allow the users to choose the target .NET Core version (1.2, 2.0 etc) (assignee: @adamsitnik)
- #366 Support the new .fsprojs targetting .NET Core (F# + .NET Core + MSBuild) (assignee: @adamsitnik)
- #369 Consider to disable MemoryDiagnoser by default (assignee: @adamsitnik)
- #372 Troubles with ClrJob from CoreCLR project (assignee: @adamsitnik)
- #374 BenchmarkDotNet doesn't understand netcoreapp2.0 (assignee: @adamsitnik)
- #375 Troubles with dotnet pack (assignee: @adamsitnik)
Merged pull requests (2)
- #355 Fixed typo in IntroBasic.cs (by @mmayr-at)
- #357 Farewell project json (by @adamsitnik)
Commits (79)
- 8099a5 Print process.StartInfo in Executor (by @AndreyAkinshin)
- abd931 Update BenchmarkDotNet.sln.DotSettings (by @AndreyAkinshin)
- 5c8c75 toolchains should not require parameterless ctors, the real fix for #327 (by @adamsitnik)
- b22cf2 allow the users to choose the target .NET Core version, fixes #336 (by @adamsitnik)
- f99c82 .net core toolchain: root folder detection bug fix (by @adamsitnik)
- c7aba1 experimental .NET Core support for the new VS 2017 csproj files, #300 (by @adamsitnik)
- bca146 Additional density plots in RPlotExporter (by @AndreyAkinshin)
- 4bb147 Additional cummean plots in RPlotExporter (by @AndreyAkinshin)
- 8bf40c Implement top sort in CompositeExporter (by @AndreyAkinshin)
- ad771d Always print the AllocationColumn in the Summary table (if MemoryDiagnoser is... (by @AndreyAkinshin)
- 8a1f0e Fix order of exporters in ExporterDependencyTests (by @AndreyAkinshin)
- a7366e xproj to csproj auto migration (by @adamsitnik)
- cec3e2 xproj to csproj: manual changes (conditional recursive dependencies not suppo... (by @adamsitnik)
- 74006d xproj to csproj: I did not ask for the .NET Standard dependency (by @adamsitnik)
- bf7093 xproj to csproj: manual changes (conditional dependencies not supported anymo... (by @adamsitnik)
- 4e060f xproj to csproj: manual changes (simple case not supported) (by @adamsitnik)
- 59602c remove F# .NET Core samples (not working now) (by @adamsitnik)
- 2488ae cleanup (by @adamsitnik)
- d7925b get our toolchain up and running, thanks to @cesarbs (by @adamsitnik)
- e719e7 Update IntroBasic.cs (by @mmayr-at)
- 1ef000 Merge pull request #355 from mmayr-at/patch-1 (by @AndreyAkinshin)
- 5cf1dc making diagnosers, ctrl+c, custom priority and affinity work for the new csprojs (by @adamsitnik)
- d0f334 getting net46 toolchain work again for new .csprojs when called from .NET Cor... (by @adamsitnik)
- d1bf9b removing old project.json workarounds (by @adamsitnik)
- e0b134 taking advantage of the csproj (by @adamsitnik)
- 001b3f appveyor stuff (by @adamsitnik)
- 63d674 don't introduce limit for .sln file search depth (by @adamsitnik)
- 81adbb make VS stop complaining about root namespace for BenchmarkDotNet.Core project (by @adamsitnik)
- 2eee5f let's round it to reduce the side effects of Allocation quantum (by @adamsitnik)
- f38e93 a project that targets AnyCPU cany be referenced by any other executable (32 ... (by @adamsitnik)
- 8ed5a4 post code review changes (by @adamsitnik)
- 50c938 add possibility to use RetainVMGarbageCollection config switch (by @adamsitnik)
- ca1bc8 final Cleanup and some renaming ;) (by @adamsitnik)
- a26d61 Update BenchmarkDotNet.sln.DotSettings (by @AndreyAkinshin)
- 008819 getting all the test runnable again (by @adamsitnik)
- a66913 trying to get the versioning done right (by @adamsitnik)
- c6f245 the updated docs (by @adamsitnik)
- f1a1fd update to the latest xUnit 2.2 + minor cleanup (by @adamsitnik)
- 262c87 appveyor config + minor bug fixes (by @adamsitnik)
- 1a7bd4 Support the new .fsprojs targetting .NET Core (F# + .NET Core + MSBuild), fix... (by @adamsitnik)
- e8f6ac support projects without .sln file (dotnet cli only) (by @adamsitnik)
- 1b71c5 update our tests to net452 because XUnit VS runner 2.2 does no longer support... (by @adamsitnik)
- 6121ad disable shadow copy for our integration tests (by @adamsitnik)
- 54375c warn the users when code optimization was not enabled (debug build can be opt... (by @adamsitnik)
- 03ed32 stop using --binaries option which started producing new folder for every re... (by @adamsitnik)
- 27f280 dotnet cli like to not release used files for a while.. (by @adamsitnik)
- 7886ad Merge pull request #357 from dotnet/farewellProjectJson (by @AndreyAkinshin)
- 751f64 Xplat RuntimeInformation.GetProcessorName() (by @AndreyAkinshin)
- b327b7 tell why dotnet command failed + how much time it took to execute (by @adamsitnik)
- b740bb WindowsVersion on CoreCLR (by @AndreyAkinshin)
- 5b879b Lazty HostEnvironmentInfo.OsVersion (by @AndreyAkinshin)
- 76d081 Lazy HostEnvironmentInfo.OsVersion, fix in ToFormattedString() (by @AndreyAkinshin)
- 5dafb9 do not restore or build the dependent projects, just the auto-generated one (by @adamsitnik)
- 5c1914 better troubleshooting: when dll is not found but somehow build has succeeded... (by @adamsitnik)
- 322998 using csproj to tell msbuild where to put output so appveyor custom settings ... (by @adamsitnik)
- e2a8fa post code review changes (by @adamsitnik)
- 6fe93d MinIterationTimeAnalyser (by @AndreyAkinshin)
- 3ac892 RunStrategy.Monitoring (by @AndreyAkinshin)
- f412b9 Docs: add FAQ section about supported version of Visual Studio (by @AndreyAkinshin)
- 67a007 fixing ProjectJsonToolchains after recent CsProjToolchain optimizations (by @adamsitnik)
- 2b5c6e Improved RuntimeInformation.GetProcessorName() (by @AndreyAkinshin)
- a44638 Improved RuntimeInformation.GetOsVersion() (by @AndreyAkinshin)
- f58e06 Improved RuntimeInformation.GetRuntimeVersion() for Mono (by @AndreyAkinshin)
- fdca26 Minor RuntimeInformation fixes (by @AndreyAkinshin)
- 2a2168 Fix bug in ExternalToolsHelper (by @AndreyAkinshin)
- 9dfd95 Custom path for mono, fixes #306 (by @adamsitnik)
- 448b07 disable MemoryDiagnoser by default, BREAKING CHANGE, fixes #369 (by @adamsitnik)
- 125b71 docs for Custom Mono Paths, #306 (by @adamsitnik)
- a3d6e0 docs/FAQ: Add section about new .NET Core Console App in VS2017 (by @AndreyAkinshin)
- b04195 give users the AnyCpu hint when they struggle with BadImageFormatException, f... (by @adamsitnik)
- 7de671 generate the projects in the bin folder, not solution's root (by @adamsitnik)
- 1d52ae docs/FAQ: add another question (by @AndreyAkinshin)
- 06aaa0 copy NetCoreAppImplicitPackageVersion and RuntimeFrameworkVersion settings to... (by @adamsitnik)
- f1fe16 shame on me for not building the code for all TFMs before pushing (by @adamsitnik)
- fe33dd GitHub Markdown: every table row should start with "|" , fixes #320 (by @adamsitnik)
- 7d0d73 remove old results, otherwise, the file will be overwritten and remaining old... (by @adamsitnik)
- 80348b Change Hint color to DarkCyan #376 (by @AndreyAkinshin)
- 0b35ec Increase MinIterationTime (Accuracy improvement) (by @AndreyAkinshin)
- cdee09 Set library version: 0.10.3 (by @AndreyAkinshin)
Contributors (3)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Michael Mayr (@mmayr-at)
Thank you very much!
Additional details
Date: March 01, 2017
Milestone: v0.10.3
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.3
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.3
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.3
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.3
BenchmarkDotNet v0.10.2
- Closed #307: culture invariant statistics output
- Closed #321: persist optimized, auto-generated dll compiled from url/plain code
- Closed #322: always restore the console foreground color
- Closed #337: Better detection of Rscript.exe in RPlotExporter
- Closed #345: fix bug in WelchTTestPValueColumn for DryJob
- VS 2017 compatibility fix
- fix bold markup for Atlassian exporter
- Improved precision of nanobenchmarks
- Minor infrastructure changes and misc fixes
Milestone details
In the v0.10.2 scope, 10 issues were resolved and 3 pull requests were merged. This release includes 30 commits by 8 contributors.
Resolved issues (10)
- #295 Fix CLS-compliant warnings in Diagnostics (assignee: @adamsitnik)
- #307 Output: interpolated strings & culture (assignee: @alinasmirnova)
- #319 [Request] some API to public? (assignee: @adamsitnik)
- #321 BenchmarkRunner.RunUrl throws BenchmarkSystem.IO.FileNotFoundException (assignee: @adamsitnik)
- #327 Unable to use ClassicToolchain in explicit way (assignee: @adamsitnik)
- #332 default color of terminal is changed after the run is completed (assignee: @adamsitnik)
- #335 Support benchmarking startup performance (assignee: @AndreyAkinshin)
- #337 Problematic mechanism/docs for locating Rscript.exe
- #340 [FeatureRequest] Enable Characteristic-based properties for non-job types. (assignee: @ig-sinicyn)
- #345 Fail to run IntroAdvancedStats in dry mode (assignee: @AndreyAkinshin)
Merged pull requests (3)
- #338 Fix typo (by @roji)
- #339 Better detection of Rscript in RPlotExporter (by @roji)
- #341 Base types for characteristic objects: (by @ig-sinicyn)
Commits (30)
- e7c398 Fixes parentheses error (by Josef Ottosson)
- 2655b3 Merge pull request #318 from joseftw/patch-1 (by @adamsitnik)
- 4115a2 make GcStats and Net46Toolchain internal members public, fixes #319 (by @adamsitnik)
- 52f953 ignore the CLS compilant errors for Diagnosers package, fixes #295 (by @adamsitnik)
- d96b68 Improved Consumer (by @AndreyAkinshin)
- 943c49 CLSCompliant fixes in Consumer (by @AndreyAkinshin)
- f4bdae specify the .NET Core sdk version in explicit way to get the solution working... (by @adamsitnik)
- df8c55 always restore the console foreground color, fixes #332 (by @adamsitnik)
- 24dea4 fix bold markup for Atlassian exporter (by @lahma)
- 4d3c75 persist optimized, auto-generated dll compiled from url/plain code, fixes #321 (by @adamsitnik)
- 2e92a2 allow to set Classic/Roslyn tool chain in explicit way, fixes #327 (by @adamsitnik)
- aabece Merge pull request #329 from lahma/features/atlassian-bold-format (by @adamsitnik)
- 91152c ExportToFiles now accepts console logger (by @roji)
- 299375 Base types for characteristic objects: (by @ig-sinicyn)
- afc65d Better detection of Rscript.exe in RPlotExporter (by @roji)
- 15869b Merge pull request #339 from roji/rscript-detect (by @AndreyAkinshin)
- 9f6a82 Merge pull request #341 from ig-sinicyn/feature-characteristic-object (by @AndreyAkinshin)
- 432adf Fix typo (by @roji)
- cfa015 Merge pull request #338 from roji/dependencies-typo (by @AndreyAkinshin)
- 4d953f Temporary rollback of the link to appveyor (by @AndreyAkinshin)
- 1f5a6e Update year in docs footer (by @AndreyAkinshin)
- 183ab6 Fix warning in RoslynToolchain (by @AndreyAkinshin)
- 6fd9f3 Used ToStr to make statistics builder culture invariant (fixed #307) (by @alinasmirnova)
- 3a3100 Merge pull request #346 from alinasmirnova/master (by @AndreyAkinshin)
- 7ee2f1 Fix in WelchTTestPValueColumn for DryJob, fixes #345 (by @AndreyAkinshin)
- 795f4a Disable jitting for RunStrategy=ColdStart, fixes #335 (by @AndreyAkinshin)
- 5b5a8c Fixed typo (by @lukasz-pyrzyk)
- 54519c Merge pull request #347 from lukasz-pyrzyk/master (by @adamsitnik)
- fbac75 Introduced Dummy actions (by @AndreyAkinshin)
- 484f53 Set library version: 0.10.2 (by @AndreyAkinshin)
Contributors (8)
- Adam Sitnik (@adamsitnik)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin (@AndreyAkinshin)
- ig-sinicyn (@ig-sinicyn)
- Josef Ottosson
- Łukasz Pyrzyk (@lukasz-pyrzyk)
- Marko Lahma (@lahma)
- Shay Rojansky (@roji)
Thank you very much!
Additional details
Date: January 21, 2017
Milestone: v0.10.2
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.2
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.2
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.2
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.2
BenchmarkDotNet v0.10.1
- MemoryDiagnoser got improved. The changes:
- Memory Diagnoser is now part of BenchmarkDotNet.Core.dll, and it's enabled by default
- MemoryDiagnoser is 100% accurate about allocated memory when using default settings or Job.ShortRun or any longer job. (see #284)
- Memory Diagnoser no longer includes allocations from Cleanup/Setup methods (see #186)
- the results are now scaled so they are stable across the runs. (see #133)
- .NET Core 1.1+ support, we no longer support 1.0, we target netcoreapp1.1 now. Reason: we wanted to use
GC.GetAllocatedBytesForCurrentThread
in MemoryDiagnoser which is available only in 1.1+ - Improved information about environment in summary
- Minor bugfixes
Milestone details
In the v0.10.1 scope, 9 issues were resolved and 2 pull requests were merged. This release includes 38 commits by 2 contributors.
Resolved issues (9)
- #133 High differences between run for GC Diagnoser (assignee: @adamsitnik)
- #186 GC Diagnoser should not include allocations done by Setup method (assignee: @adamsitnik)
- #200 be accurate about allocated bytes/op (assignee: @adamsitnik)
- #208 Troubles with MemoryDiagnoserTests (assignee: @adamsitnik)
- #298 PlatformNotSupportedException when reading ProcessorAffinity on MacOS (assignee: @adamsitnik)
- #301 netcoreapp1.1 support (assignee: @adamsitnik)
- #309 Diagnosers don't export data to the measurements.csv files (assignee: @adamsitnik)
- #312 RuntimeInformation can be made static and internal (assignee: @AndreyAkinshin)
- #313 Bug in Generator (interface as a return type) (assignee: @AndreyAkinshin)
Merged pull requests (2)
- #284 built-in accurate and cross platform Memory Diagnoser (by @adamsitnik)
- #314 Improved information about job environments in summary (by @AndreyAkinshin)
Commits (38)
- 23f3b2 built-in accurate and cross platform Memory Diagnoser, fixes #186, fixes #200 (by @adamsitnik)
- 4cabc2 don't try to use AppDomain's Monitoring in Mono since it's not implemented there (by @adamsitnik)
- 99c21e scale GC collections count / op, makes MemoryDiagnoser output stable for benc... (by @adamsitnik)
- e91255 use per mille to make the Memory Diagnoser output more human-friendly + reduc... (by @adamsitnik)
- a0536d Merge branch 'master' into universalMemoryDiagnoser (by @adamsitnik)
- ade1be preallocate results list in more safe, but still ugly way (by @adamsitnik)
- 102282 closed the ugly code in separate class (by @adamsitnik)
- 7825b7 Update links in docs (by @AndreyAkinshin)
- aaf720 Fix typo (by @AndreyAkinshin)
- 1e2d38 update to netcoreapp1.1 in order to get universal cross platform memory diagn... (by @adamsitnik)
- e69e80 don't show Gen 1 and Gen 2 columns if empty for all benchmarks (by @adamsitnik)
- b10a84 PlatformNotSupportedException when reading ProcessorAffinity on MacOS, fixes ... (by @adamsitnik)
- 2a529a update to .NET Core 1.1, fixes #301 (by @adamsitnik)
- e6ccee always show Gen 0 column, display Gen 0/1/2 per 1k op (by @adamsitnik)
- 3bcc59 Merge branch 'master' into universalMemoryDiagnoser (by @adamsitnik)
- a09810 make public things readonly, expensive things lazy and extend's validators in... (by @adamsitnik)
- eae2cd added documentation and smarter bytes formatting (by @adamsitnik)
- 1208c3 Merge branch 'master' into universalMemoryDiagnoser (by @adamsitnik)
- f1f231 Merge pull request #284 from dotnet/universalMemoryDiagnoser (by @AndreyAkinshin)
- 6300a2 include MemoryDiagnoser's results in CsvMeasurementsExporter, fixes #309 (by @adamsitnik)
- ddb37e don't use spaces in columns names in CSV, #309 (by @adamsitnik)
- 112f62 Fix stupid bug with condition for optional MedianColumn (by @AndreyAkinshin)
- 60127c Remove Cpu_Ilp_RyuJit.cs because it's obsolete (by @AndreyAkinshin)
- 401456 Print full information about a GenerateException (by @AndreyAkinshin)
- 0b9177 Support of benchmark methods with an interface as a return type, fixed #313 (by @AndreyAkinshin)
- b42b9e Improved information about job environments in summary (by @AndreyAkinshin)
- 92f1db Improved information about job environments in summary, part 2 (by @AndreyAkinshin)
- 5d8dd7 Merge pull request #314 from dotnet/summary (by @AndreyAkinshin)
- d279f6 Make RuntimeInformation static internal, fix #312 (by @AndreyAkinshin)
- 1df6ca Minor API improvements in BenchmarkSwitcher (by @AndreyAkinshin)
- c12daf Dot't show the median column for the N=1 case (by @AndreyAkinshin)
- 19caa2 RyuJit is always avaiable for .NET Core (by @adamsitnik)
- 13e12c make JitOptimizationsValidator work for .NET Core (needed properties are avai... (by @adamsitnik)
- c17b43 hide the AllocatedBytes column for Mono, show Gen 0 only if any of the benchm... (by @adamsitnik)
- 29ac91 updated docs about Diagnosers in the Overview ;) (by @adamsitnik)
- cc974e Improved information about job environments in summary, part 3 (by @AndreyAkinshin)
- 8846af Update docs (by @AndreyAkinshin)
- 37b126 Set library version: 0.10.1 (by @AndreyAkinshin)
Contributors (2)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
Additional details
Date: December 04, 2016
Milestone: v0.10.1
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.1
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.1
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.1
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.1
BenchmarkDotNet v0.10.0
- Now BenchmarkDotNet is a part of .NET Foundation
- Job and Column API refactoring (see new documentation)
- Measurement engine improvements
- Horology enhancement (see
TimeInterval
andFrequency
) - Introduced
RankColumn
which is based onWelchTTest
(see 157aabc3) - JsonExporters refactoring (see the Exporters/Json section in the documentation)
- Renamed JsonExporters classed and attributes
- JsonExporters with custom settings
- JsonExporters now includes information about the target type namespace (see #246).
- Add
JetBrains.Annotations
(see #253) - RFC 4180 support in CSV exporters (see #241)
- Many bugfixes
Milestone details
In the v0.10.0 scope, 19 issues were resolved and 7 pull requests were merged. This release includes 85 commits by 7 contributors.
Resolved issues (19)
- #30 Better information when we haven't got a valid measurement
- #121 Strange # of "Launches" chosen with Count.Auto
- #154 PathTooLong exception on custom config
- #185 Report if difference between 2 benchmarks is statistically significance
- #241 .csv results output does not play well with Excel or Google Sheets
- #244 DefaultConfig StatisticColumn values
- #246 No namespace information?
- #265 Add ability to specify that benchmark requires STAThread
- #266 Don't assume that TargetType has reference to BenchmarkDotNet (assignee: @adamsitnik)
- #268 Print runtime of child processes in summary
- #271 Params attribute does not handle nullable types
- #272 [Setup] error when doing inheritance
- #276 System.EntryPointNotFoundException
- #280 Cannot run on OSX / Mono (System.Xml.XmlException: Root element is missing)
- #281 Results are exported twice for single run
- #288 IdleWarmup running off forever
- #291 [Bug] Incorrect results for targetCount:Auto
- #292 Support for Beta versions
- #296 [BUG] NRE in OutliersAnalyser
Merged pull requests (7)
- #253 Mark [Benchmark] as implying implicit use (by @roji)
- #267 Make shipped assemblies have CLSCompliant(true) applied (by @lahma)
- #277 Changed diagnosers flow, reduced heap allocations in Engine to 0 (by @adamsitnik)
- #278 Support Atlassian flavored wiki markup (by @lahma)
- #286 Mutable Job implementation (by @ig-sinicyn)
- #287 Fix docs: job API changed (by @ig-sinicyn)
- #293 Presenters: IFormattable support (by @ig-sinicyn)
Commits (85)
- a8b4e7 JsonExporters refactoring (by @AndreyAkinshin)
- e6a4ae JsonExporters: add information about namespaces, resolves #246 (by @AndreyAkinshin)
- 29ee0a Add Namespace column (by @AndreyAkinshin)
- 26c333 Better error message (by @arthrp)
- 12b313 Merge pull request #251 from arthrp/master (by @AndreyAkinshin)
- 03d00c Mark [Benchmark] as implying implicit use (by @roji)
- 394a93 Merge pull request #253 from roji/resharper-annotations (by @AndreyAkinshin)
- 4912ea Remove unnecessary specific shell reference (by @factormystic)
- 023115 Merge pull request #254 from factormystic/patch-1 (by @AndreyAkinshin)
- 972fee Big refactoring (by @AndreyAkinshin)
- cf839a Improved ranks (by @AndreyAkinshin)
- ef3ecf Extended TimeInterval and Frequency API (by @AndreyAkinshin)
- dfcc98 Minor fixes (by @AndreyAkinshin)
- fb3757 Improved CSV export, fixes #241 (by @AndreyAkinshin)
- f490d1 further root folder cleanup #228 (by @adamsitnik)
- f7a6a0 Added [MeansImplicitUse] and explanation to summary for SetupAttribute and Cl... (by @adamsitnik)
- 56b1f2 Configuration fix in JitOptimizationsTests (by @AndreyAkinshin)
- faac58 Introduce AnaylyzeLaunchVariance (by @AndreyAkinshin)
- 9953a9 Smart statistics in StatisticsColumnProvider (by @AndreyAkinshin)
- 2a6578 Minor fixes in docs (by @AndreyAkinshin)
- 03fb04 Introduce UnrollFactor (by @AndreyAkinshin)
- 137636 NewLine fix in OutputLogger (by @AndreyAkinshin)
- b35d52 Unique column support (by @AndreyAkinshin)
- 24e944 Don't assume that TargetType has reference to BenchmarkDotNet, fixes #266 (by @adamsitnik)
- 69330a Make shipped assemblies have CLSCompliant(true) applied (by @lahma)
- fb8402 Merge pull request #267 from lahma/features/cls-compliancy (by @adamsitnik)
- 0944b5 Make exported HTML valid, add alternating color to result table (by @lahma)
- 748a2c Merge pull request #269 from lahma/features/html-export-enhancements (by @adamsitnik)
- afff51 ExecutionValidator should not throw on overridden [Setup] methods, fixes #272 (by @adamsitnik)
- ab9db4 Support nullable types as [Params], fixes #271 (by @adamsitnik)
- ce4994 support for [STAThread], fixes #265 (by @adamsitnik)
- 13fa5c move ConsoleHandler to separate file for better readability (by @adamsitnik)
- 0e8e82 Print runtime of child processes in summary, fixes #268 (by @adamsitnik)
- 491a28 Print more info about runtime of child processes in summary (and in a nicer w... (by @adamsitnik)
- 0580a5 updated docs for #265 (by @adamsitnik)
- f9baa6 catch native exceptions when determining clock type, #276 (by @adamsitnik)
- 93a23d Check OS version in WindowsClock, fixed #276 (by @AndreyAkinshin)
- 8d65fe changed diagnosers flow, possibility to hook up before jitting, after setup a... (by @adamsitnik)
- f346ff added predefined attributes for diagnosers (by @adamsitnik)
- e7cc6b Support Atlassian flavored wiki markup (by @lahma)
- 376bd8 reduce memory allocated by Engine during run to increase MemoryDiagnoser accu... (by @adamsitnik)
- b5ab55 display results when runing when no diagnoser is attached (by @adamsitnik)
- 7ae2b5 Improved idle method for primitive types (by @AndreyAkinshin)
- e1213a Fix NRE in BuildJobRuntimes (by @AndreyAkinshin)
- 572fa4 Make code CLS-Compliant, fix CS3015 warning (by @AndreyAkinshin)
- 4070a1 preload all settings in ctors, introduced IEngineFactory (by @adamsitnik)
- 2f0df7 make Engine use InvocationCount (by @adamsitnik)
- 8a7a12 calculate Statistics without allocations! makes the code look bad, but saves ... (by @adamsitnik)
- d8fa70 remove last allocations from Engine.Run (by @adamsitnik)
- f2a106 perform Jitting after first Setup call, better naming, test fix (by @adamsitnik)
- be3ce3 introduce general catch with hopes to help with #280 (by @adamsitnik)
- 3c5e70 post code review changes (by @adamsitnik)
- 16e258 possibility to define custom Engine (by @adamsitnik)
- afa586 Merge pull request #277 from PerfDotNet/diagnosersFlow (by @adamsitnik)
- 534189 export files only once, not twice, fixes #281 (by @adamsitnik)
- a733b5 Mutable Job implementation (by @ig-sinicyn)
- 259647 Merge pull request #286 from ig-sinicyn/feature-mutable-characteristics (by @AndreyAkinshin)
- c184b8 Fix docs: job API changed (by @ig-sinicyn)
- 47b152 Merge pull request #287 from ig-sinicyn/fix-docs-jobs-updated (by @AndreyAkinshin)
- 868ffc Jobs: WithXxx() extension methods added back, docs updated (by @ig-sinicyn)
- eede54 Jobs: .With() methods now create new instances of the Job. (by @ig-sinicyn)
- 40f160 Test fixed (by @ig-sinicyn)
- fd92f7 Jobs: helper for .With() methods (by @ig-sinicyn)
- 307b72 Merge pull request #289 from ig-sinicyn/features-jobs-with (by @AndreyAkinshin)
- d576f5 Presenters: IFormattable support (by @ig-sinicyn)
- 8647e7 Fix #291 (by @AndreyAkinshin)
- 49c000 Merge pull request #293 from ig-sinicyn/fix-presenter-culture (by @AndreyAkinshin)
- 684334 Merge pull request #278 from lahma/features/atlassian-wiki-markup (by @AndreyAkinshin)
- 7f3ca5 Make BenchmarkRunnerCore.Run public (by @AndreyAkinshin)
- 10a91e Allow using newer versions of Microsoft.NETCore.App, fixes #292 (by @adamsitnik)
- 134d74 Misc improvements in Exporters (by @AndreyAkinshin)
- 33c63f Respect RemoveOutliers in the RunResults (by @AndreyAkinshin)
- 5e022b Fix #291, part 2 (by @AndreyAkinshin)
- 4b6ea9 Improved name for the Id CharacteristicColumn (by @AndreyAkinshin)
- af6f8a Fix some compilation warnings (by @AndreyAkinshin)
- 2f8584 Analysers refactoring + OutliersAnalyser (by @AndreyAkinshin)
- b11935 Make BenchmarkRunnerCore public (by @AndreyAkinshin)
- 781740 Specify generated id for the default job (by @AndreyAkinshin)
- 846255 JobTests.Test01Create fix (by @AndreyAkinshin)
- 9f9544 Check if there is no MainTarget measurements in OutliersAnalyser, fixes #296 (by @AndreyAkinshin)
- 503b04 Proper exception in GetStatistics for empty input, see #296 (by @AndreyAkinshin)
- c667aa Fix path to logo (by @AndreyAkinshin)
- 0b91c3 Fix null check in JobMode.ApplyCore (by @AndreyAkinshin)
- 2edb56 Copyrights and links update (by @AndreyAkinshin)
- 2edb9a Set library version: 0.10.0 (by @AndreyAkinshin)
Contributors (7)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Arthur (@arthrp)
- factormystic (@factormystic)
- ig-sinicyn (@ig-sinicyn)
- Marko Lahma (@lahma)
- Shay Rojansky (@roji)
Thank you very much!
Additional details
Date: November 10, 2016
Milestone: v0.10.0
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.10.0
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.10.0
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.10.0
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.10.0
Online Documentation: https://dotnet.github.io/BenchmarkDotNet/
BenchmarkDotNet v0.9.9
- Attribute config style (see #166)
- Online documentation (see #219)
- Mono LLVM support (see #226)
- Async method support (see #236)
- NuGet packages and repo layout restructuring (see #225, #228)
[Cleanup]
attribute (see #215)- New statistics columns:
Skewness
,Kurtosis
,WelchTTestPValue
, Improved math for theScaled
column - Now current default branch is
master
- Minor improvements and bug fixes
Milestone details
In the v0.9.9 scope, 14 issues were resolved and 1 pull requests were merged. This release includes 46 commits by 4 contributors.
Resolved issues (14)
- #166 Suggestion: Attribute Config style (assignee: @AndreyAkinshin)
- #215 Allow a [Cleanup] method to be specified
- #219 Online documentation and API reference
- #223 Add support for System.Type in Params
- #224 [Breaking change] BenchmarkAttribute become sealed.
- #225 Refactoring the roslyn dependency into another package
- #226 Support Mono/LLVM as a runtime/jit
- #227 Suggestion: change default branch (assignee: @AndreyAkinshin)
- #228 Suggestion: clean up the root folder
- #231 Add references to default framework assemblies (System.Runtime etc)
- #232 Make all tests use OutputLogger (assignee: @adamsitnik)
- #235 Don't show non-error output of dotnet cli (assignee: @adamsitnik)
- #236 Possibility to benchmark asynchronous methods (assignee: @adamsitnik)
- #240 Total Time reports hour rounded up
Merged pull requests (1)
- #233 Add support of Cleanup attribute #215 (by @DenisIstomin)
Commits (46)
- f9f748 Improved "Scaled" column (by @AndreyAkinshin)
- 5d7ba9 Warmup improvements (by @AndreyAkinshin)
- 664c64 Add Skewness, Kurtosis, and WelchTTestPValue columns and configs (by @AndreyAkinshin)
- c9e802 Attribute Config style, fixes #166 (by @AndreyAkinshin)
- 378173 README: add supported OS (by @AndreyAkinshin)
- 50ac57 Make Benchmark, Params and Setup attributes non-sealed again, fixes #224, #57 (by @adamsitnik)
- b9c815 Support Mono/LLVM as a runtime/jit, fixes #226 (by @adamsitnik)
- cdfbd5 Update info about default branch, see #227 (by @AndreyAkinshin)
- 42e9b9 Add System.Type support in Params, fixes #223 (by @AndreyAkinshin)
- db3dc3 Suggestion: clean up the root folder, fixes #228 (by @adamsitnik)
- 4e1db3 use shorter names for test for xunit test runner (method name instead of full... (by @adamsitnik)
- a35b22 make sure all framework assemblies are referenced, #231 (by @adamsitnik)
- 19426a spliting BenchmarkDotNet.dll to few dlls to avoid mandatory Roslyn dependency... (by @adamsitnik)
- 356a39 move BenchmarkRunner's core to separate class to .Core project so it can be ... (by @adamsitnik)
- 0121a6 minor cleanup: rename LLVM => Llvm, remove [Obsolete] things (by @adamsitnik)
- fb8047 Make all tests use OutputLogger, fixes #232 (by @adamsitnik)
- ae17a7 Add support of Cleanup attribute, fix #215 (by @DenisIstomin)
- 3bf9c0 Merge branch 'master' of https://github.com/PerfDotNet/BenchmarkDotNet (by @adamsitnik)
- 355c6f Don't show non-error output of dotnet cli, fixes #235 (by @adamsitnik)
- 76df80 Possibility to benchmark asynchronous methods #236 (by @adamsitnik)
- 3ab578 use GetAwaiter().GetResult() for Tasks instead of .Wait or .Result, #236 (by @adamsitnik)
- d1db7d Added documentation source and output based on readme.md (by @FransBouma)
- ac8cf2 Updated folder structure, removed html output, updated gitignore (by @FransBouma)
- bed0f9 Removed unused folder copy directive from docnet.json (by @FransBouma)
- 650fca Merge pull request #239 from FransBouma/master (by @AndreyAkinshin)
- aceb96 Added Api docs generation directives (by @FransBouma)
- a9ee7c Fix in total time formatting, fix #240 (by @AndreyAkinshin)
- 1d2141 Update README.md (by @AndreyAkinshin)
- 7b9fdb Fixed a couple of issues with api doc generation (by @FransBouma)
- 682837 Merge pull request #243 from FransBouma/master (by @AndreyAkinshin)
- 9a2cf2 docs improvements (by @AndreyAkinshin)
- 334925 Rename: GarbageCollection -> GcMode (by @AndreyAkinshin)
- 7a740a SummaryTableTests and minor refactorings (by @AndreyAkinshin)
- c9d358 Transform GcModeColumn with null values to a trivial column (by @AndreyAkinshin)
- cb6359 Improved HardwareTimerKind detection (by @AndreyAkinshin)
- 04f736 Fix references in the IntegrationTests project files (by @AndreyAkinshin)
- a9403a Fix warnings (by @AndreyAkinshin)
- 691a05 BenchmarkDotNet.Tests: Remove the System.Globalization dependency (by @AndreyAkinshin)
- 9e97d7 Show JitModules in EnvInfo only for the classic toolchain (by @AndreyAkinshin)
- 823518 Improved docs (by @AndreyAkinshin)
- 5fb854 Update README (by @AndreyAkinshin)
- 5ebf8b Minor fixes (by @AndreyAkinshin)
- 086dfd generic wrapper for config values (by @adamsitnik)
- cf58b0 Merge branch 'gc' (by @adamsitnik)
- bbccbe docs: add informations about NuGet packages (by @AndreyAkinshin)
- 60bea3 Set library version: 0.9.9 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Denis Istomin (@DenisIstomin)
- Frans Bouma (@FransBouma)
Thank you very much!
Additional details
Date: August 18, 2016
Milestone: v0.9.9
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.9
- https://www.nuget.org/packages/BenchmarkDotNet.Core/0.9.9
- https://www.nuget.org/packages/BenchmarkDotNet.Toolchains.Roslyn/0.9.9
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.9.9
Online Documentation: https://perfdotnet.github.io/BenchmarkDotNet/
BenchmarkDotNet v0.9.8
- CoreCLR RTM support (see #216). Breaking change: we have dropped dnx451 and dnxcore50 support.
- Migration from MSBuild to Roslyn, which supports Mono on Linux and MacOS (see #149). Breaking change: we have dropped .NET 4.0 support.
- Ability to manage GC mode: turn on/off the Server/Concurrent GC modes, extend to CPU groups, set gcAllowVeryLargeObjects and avoid BenchmarkDotNet from forcing GC.Collect (see #188, #76 and #211)
- Support CopyToOutput (see #212). Now you can use native dependencies as well as custom files.
- Copying custom settings from app.config (see #108). It means we support assembly binding redirects as well as custom connection strings etc.
- AsciiDocExporter (see #169)
- Framework setting in Job has been removed (see #194)
- Minor bugfixes and improvements
Milestone details
In the v0.9.8 scope, 21 issues were resolved and 1 pull requests were merged. This release includes 69 commits by 5 contributors.
Resolved issues (21)
- #57 Make Benchmark, Setup and Params attribute sealed in explicit way
- #76 Allow users to set gcAllowVeryLargeObjects for Runtime Settings (assignee: @AndreyAkinshin)
- #77 Implement a C.I build (assignee: @mattwarren)
- #108 Copy custom setting from app.config
- #131 [Mono] BenchmarkDotNet doesn't work on Mac OS
- #149 Migrate from MSBuild to Roslyn
- #174 NRE in Summary indexer property.
- #176 Split and simplify printed summaries
- #188 Ability to manage GC mode: turn on/off the Server/Concurrent GC modes and extend to CPU groups
- #191 MSBuild dependency - best way of fixing?
- #194 Framework settings in Jobs (assignee: @mattwarren)
- #196 Allow specifying a gist url to RunUrl
- #197 Regression in 0.9.7: --help option fails under dotnet run
- #203 Third-party libraries must be explicitly included in test context to be loaded by runner
- #209 Fix appveyor bug
- #211 Possibility to turn off GC.Collect after each benchmark run (assignee: @adamsitnik)
- #212 Support CopyToOutput
- #214 Benchmark ignores binding redirects
- #216 Update to .NET Core RTM (assignee: @adamsitnik)
- #218 Errors in BenchmarkDotNet.Samples.FSharp.Core/projects.json
- #222 A problem with System.Threading.Tasks
Merged pull requests (1)
Commits (69)
- fcf48e Support export to asciidoc (by @russcam)
- 590a0a Road to Roslyn: first attempt (by @AndreyAkinshin)
- 704605 Added appveyor ci build (by @gigi81)
- 3859a1 Catch exception when accessing Console.WindowWidth, fixes #197 (by @mattwarren)
- 7b92eb Filter tests by attribute (see #130) (by @mattwarren)
- dd3464 Merge pull request #202 from gigi81/appveyor-build-2 (by @adamsitnik)
- 29d106 Added missing 'build dependency' (by @gigi81)
- 2e8209 Merge pull request #205 from gigi81/fix-missing-dependency (by @AndreyAkinshin)
- ff298d Appveyor build improvements (by @gigi81)
- 600cdd Merge pull request #206 from gigi81/appveyor-4 (by @AndreyAkinshin)
- 68b070 Fixed tests not using OutputLogger (by @gigi81)
- 7d0501 Renamed _output to output (by @gigi81)
- ae5eab Merge pull request #207 from gigi81/fix-outputlogger (by @AndreyAkinshin)
- dfe110 Small cleanup: remove compilation warnings (by @AndreyAkinshin)
- ffe9f7 Clean up, part 2 (by @AndreyAkinshin)
- 559f20 appveyor specific test fixes (by @AndreyAkinshin)
- 38af24 MemoryDiagnoserTests: double.Parse Culture fix (by @AndreyAkinshin)
- 02048d StatResultExtenderTests: SpeedUp (by @AndreyAkinshin)
- f2b21f Clean up, part 3 (by @AndreyAkinshin)
- d32328 SpeedUp: BaselineScaledColumnsTest, StatResultExtenderTests (by @AndreyAkinshin)
- 5e37fa MemoryDiagnoserTests: additional parsing fixes (by @AndreyAkinshin)
- 45c66f Merge branch 'develop' into Roslyn (by @adamsitnik)
- a4cb8c MemoryDiagnoserTests: Temporarily suppressed (by @AndreyAkinshin)
- ae38a5 README: add the appveyor badge (by @AndreyAkinshin)
- 77bd64 README: update badges (by @AndreyAkinshin)
- a74f82 README: update badges, part 2 (by @AndreyAkinshin)
- 453a49 merging recent changes from develop with Roslyn branch to get it working again (by @adamsitnik)
- ce4af5 add dependencies in recursive way, fixes #203 (by @adamsitnik)
- a36af4 farewell MSBuid (by @adamsitnik)
- d2dd83 Workaround for xunit bug (by @gigi81)
- 46f2b7 Merge pull request #210 from gigi81/xunit-workaround-2 (by @AndreyAkinshin)
- c5b4ae Merge remote-tracking branch 'refs/remotes/origin/develop' into Roslyn (by @AndreyAkinshin)
- 54109b copy custom settings from app.config file, fixes #108 (by @adamsitnik)
- 20c41f enable GC settings customization, fixes #188 (by @adamsitnik)
- dd0bc4 tests fix ;) (by @adamsitnik)
- 0726b5 Possibility to turn off GC.Collect after each benchmark run, fixes #211 (by @adamsitnik)
- da24b4 rename GC to GarbageCollection to avoid conflicts with System.GC (by @adamsitnik)
- 3bf420 gcAllowVeryLargeObjects, fixes #76 (by @adamsitnik)
- bdce98 split EnvironmentInfo into Host and Benchmark specific, make expensive method... (by @adamsitnik)
- e819c8 added GC info to BenchmarkEnvironmentInfo (by @adamsitnik)
- 9e0480 change GC settings display order (Workstation Concurrent => Concurrent Workst... (by @adamsitnik)
- d03d17 support CopyToOutput: build in output directory + some refacotring, fixes #212 (by @adamsitnik)
- 237370 minor bug fix: support spaces in parameters representation (by @adamsitnik)
- 06349a Update to .NET Core RTM, drop DNX* support, fixes #216 (by @adamsitnik)
- 106477 Merge branch 'develop' of https://github.com/russcam/BenchmarkDotNet into rus... (by @AndreyAkinshin)
- 2e18db Merge branch 'russcam-develop' into develop (by @AndreyAkinshin)
- 388155 Fix a NRE bug in Summary indexer, fixes #174 (by @AndreyAkinshin)
- d448b4 Now RunUrl can work with non-raw github and gist urls, fixes #196 (by @AndreyAkinshin)
- 7e1b95 Welch's Two Sample t-test (by @AndreyAkinshin)
- cc70cb specify version of F# compiler in explicit way to workaround nuget bug, fixes... (by @adamsitnik)
- e21373 use Roslyn's managed API for compilation, drop .NET 4.0 support!! fixes #149 (by @adamsitnik)
- cd25cc use single reflection api after update to .NET 4.5 (by @adamsitnik)
- 785d92 make Benchmark, Setup and Params Attribute sealed #57 (by @adamsitnik)
- 8a3212 hopefully a workaround for appveyor build (by @adamsitnik)
- ef7e35 hopefully a workaround for appveyor build, which does not have the latest dot... (by @adamsitnik)
- 918a6d Remove xmlns for packages.config in IntegrationTests.Classic (by @AndreyAkinshin)
- b897ed Merge branch 'Roslyn' into develop (by @adamsitnik)
- 742a16 skip test that fails for Core on appveyor, #221 (by @adamsitnik)
- a94a8b skip test that fails for Classic on appveyor, #221 (by @adamsitnik)
- fec206 Fix incorrect xml-docs in MathHelper (by @AndreyAkinshin)
- 1567d9 DEVELOPING.md: add a section about develop NuGet feed (by @AndreyAkinshin)
- 5c3c31 appveyor: add BenchmarkDotNet.Diagnostics.Windows.nupkg to artifacts (by @AndreyAkinshin)
- a69188 DEVELOPING.md: fix a typo (by @AndreyAkinshin)
- 4e99b4 project.json: add tags (by @AndreyAkinshin)
- 61b4c1 use System.Threading.Tasks as nuget package to fix nuget installation problem... (by @adamsitnik)
- 976118 remove Framework settings from Jobs, fixes #194 (by @adamsitnik)
- be0b71 try to remove the directory few more times when it's still not released to ma... (by @adamsitnik)
- 0647a0 use the Configuration from the hosting process, not BDN dll (by @adamsitnik)
- c6405a Set library version: 0.9.8 (by @AndreyAkinshin)
Contributors (5)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Luigi Grilli (@gigi81)
- Matt Warren (@mattwarren)
- Russ Cam (@russcam)
Thank you very much!
Additional details
Milestone: v0.9.8
Date: July 07, 2016
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.8
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.9.8
BenchmarkDotNet v0.9.7
- .NET Core RC2 support (see #187)
- Bugfixes
Milestone details
In the v0.9.7 scope, 8 issues were resolved and 0 pull requests were merged. This release includes 27 commits by 3 contributors.
Resolved issues (8)
- #168 Unable to run tests locally
- #170 Error handling in the spawned Benchmark process (assignee: @mattwarren)
- #172 Ensure CsvMeasurementsExporter is enabled when RPlotExporter is used (assignee: @mattwarren)
- #179 Job.GetAllProperties(): old property names are used
- #181 CompositeValidator: some validators will be skipped
- #183 [Suggestion] Make ValidationError public
- #187 .NET Core RC2 (assignee: @adamsitnik)
- #192 Avoid creating .cs files at execution time
Merged pull requests (0)
Commits (27)
- 7568c0 Initial work on #130 (currently just matching existing behaviour) (by @mattwarren)
- 34965e Fixes #170 (by @mattwarren)
- 4d6d32 Remove "@" from the ProcessorName (by @AndreyAkinshin)
- 57b402 Specify HintPath for all referenced assemblies (for mono support) (by @AndreyAkinshin)
- 0d065b Merge branch 'develop' of github.com:PerfDotNet/BenchmarkDotNet into develop (by @mattwarren)
- c24a9c Less "magic" strings - Fixes #179 (by @mattwarren)
- 1371ea Allow Exporters to have dependencies, fixes #172 (by @mattwarren)
- d6a55c Further work on #130 (by @mattwarren)
- e0ebd4 Tidy up of the Json exporter code (part of #189) (by @mattwarren)
- ae330c Allow formatted/indented Json (see #189) (by @mattwarren)
- 83fd20 Also allow args with "--", i.e. --exporters=json (see #189) (by @mattwarren)
- 78af45 File missing from previous check-in "ae330c4" (#189) (by @mattwarren)
- 9352d0 "Measurments" -> "Measurements" (by @mattwarren)
- a34507 .NET Core RC2 support, fixes #187 (by @adamsitnik)
- 0c9524 remove IValidationError interface, make the implementation public, fixes #183 (by @adamsitnik)
- 30a6ec Avoid creating .cs files at execution time, fixes #192 (by @adamsitnik)
- 792176 hiding CompositeValidator, fix few typos, fixes #181 (by @adamsitnik)
- a345e7 Use short, hard coded name for folders to avoid PathTooLongEx if user does no... (by @adamsitnik)
- 354b28 minor cleanup after moving to RC2 (by @adamsitnik)
- 53b7ff dotnet cli bug workaround, Tornhoof's idea (by @adamsitnik)
- 8e6d30 added missing Nuget feeds to NuGet.Config, removed launchSettings which we do... (by @adamsitnik)
- 9addd0 Improvements in MethodInvoker (by @AndreyAkinshin)
- ccd91d Update Chronometer.HardwareTimerKind (by @AndreyAkinshin)
- e9db3d Update year in LICENSE.md (by @AndreyAkinshin)
- acd019 updated docs for .NET Core RC2 #187 (by @adamsitnik)
- 605aa1 README.md: add a link to BenchmarkDotNet.Diagnostics.Windows (by @AndreyAkinshin)
- 571b3d Set library version: 0.9.7 (by @AndreyAkinshin)
Contributors (3)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Matt Warren (@mattwarren)
Thank you very much!
Additional details
Milestone: v0.9.7
Date: May 29, 2016
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.7
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.7-beta
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.9.7
BenchmarkDotNet v0.9.6
Milestone details
In the v0.9.6 scope, 11 issues were resolved and 2 pull requests were merged. This release includes 40 commits by 5 contributors.
Resolved issues (11)
- #100 Code generation doesn't support generic classes
- #112 Generic benchmark classes are not supported
- #140 Readd an ability to define and to use custom Toolchain
- #141 [Request for comments] Assembly-level config attribute?
- #151 Crash during benchmark with baseline
- #152 MarkdownExporter.Default.ExportToLog fails with NRE for Summary with Critical Validation Errors
- #153 ManualConfig.Add(IConfig config) does not add the validators.
- #156 Cleanup benchmark folders
- #158 BaselineDiffColumn: NullReferenceException if one of the benchmark methods was failed.
- #161 Build warnings after update to 0.9.5
- #171 Problem with ExceptionDispatchInfo (assignee: @AndreyAkinshin)
Merged pull requests (2)
- #138 Percentiles added into Statistics, StatisticColumn, BaselineDiffColumn (by @ig-sinicyn)
- #164 Percentiles added into Statistics, StatisticColumn, BaselineDiffColumn (by @ig-sinicyn)
Commits (40)
- 9e625a copying validators when merging configs, fixes #153 (by @adamsitnik)
- 5d0a7d returning empty objects instead of nulls, fixes #152 (by @adamsitnik)
- cfff3b switching back to the old moniker that is supported not only by dnx and dotne... (by @adamsitnik)
- 522fde Initial work on Json export (#84) (by @mattwarren)
- 31452f Make SimpleJson build under "DNXCore,Version=v5.0" - (#84) (by @mattwarren)
- 48b17a Merge branch 'develop' of github.com:PerfDotNet/BenchmarkDotNet into develop (by @mattwarren)
- d8dad6 removing ClrMD dependencies that were causing troubles with nuget package rel... (by @adamsitnik)
- 0a81d4 removing ClrMd diagnosers, they are kept in clrmd branch (by @adamsitnik)
- 972ea2 setting BenchmarkDotNet version to one that is not in the Nuget yet to get do... (by @adamsitnik)
- 1e6581 Removing final traces or Runtime and Source SourceDiagnosers (by @mattwarren)
- 3576d4 Make BaselineDiffColumn more robust - fixes #158 and #151 (by @mattwarren)
- 3f0d7b Exclude "BenchmarkDotNet.Artifacts" folder (can get in the way when building) (by @mattwarren)
- 00995d Percentiles added into Statistics, StatisticColumn, BaselineDiffColumn (by @ig-sinicyn)
- 2410d4 Update project.json files (by @AndreyAkinshin)
- ed75f6 Assembly-level config attribute, Fixes #141 (by @AndreyAkinshin)
- 6f3a0c Add a BenchmarkSwitcher constructor for assembly, see #141 (by @AndreyAkinshin)
- 4124d0 Catch InvalidOperationException in ClassicBuilder (by @AndreyAkinshin)
- 9c8513 Cleanup benchmark folders (by default!), fixes #156 (by @adamsitnik)
- d0179f merge KeepBenchmarkFiles and allow fluent api usage, #156 (by @adamsitnik)
- b8130a Readd an ability to define and to use custom Toolchain, fixes #140 (by @adamsitnik)
- 8a263b moving KeepBenchmarkFiles merge logic to Add method (by @adamsitnik)
- e1e5c7 Sample & documentation for percentiles (by @ig-sinicyn)
- 0d4262 Merge commit '00995dfac270ae71e81897348ec379cd97fb01c3' into feature-percentiles (by @ig-sinicyn)
- 54b4f0 Merge pull request #164 from ig-sinicyn/feature-percentiles (by @AndreyAkinshin)
- f8278c Generic benchmark support, fixes #100, fixes #112 (by @AndreyAkinshin)
- c28056 Support Mono+.NET4.6 in CommonExtensions.ToStr. (by @AndreyAkinshin)
- 285f77 set dependencies to MSBuild dlls as "type": "build" to make them implicit dep... (by @adamsitnik)
- 42abd1 Merge remote-tracking branch 'refs/remotes/origin/develop' into develop (by @mattwarren)
- 030d6c Rename "GCDiagnoser" -> "MemoryDiagnoser" (by @mattwarren)
- 4e96e6 give compilation error instead of warning or exception at runtime (by @adamsitnik)
- 0fbe10 Revert "give compilation error instead of warning or exception at runtime" (by @adamsitnik)
- 19708a Tidy up of the Integration tests (by @mattwarren)
- f7b3a4 Thread safe jobs, fixes #171 (by @AndreyAkinshin)
- edf293 DisableTestParallelization for Classic integration tests to avoid races (by @adamsitnik)
- 89165f moving dll that is required for custom path integration tests out of root folder (by @adamsitnik)
- cbaa3b README: Add additional info about RPlotExprter (by @AndreyAkinshin)
- 1cc936 The benchmark is improperly testing the Max operation because as all the numb... (by @redknightlois)
- 40a1ea Merge pull request #173 from redknightlois/develop (by @AndreyAkinshin)
- a9bf3b README: add information about the diagnostics package (by @AndreyAkinshin)
- 5191bc Set library version: 0.9.6 (by @AndreyAkinshin)
Contributors (5)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Federico Andres Lois (@redknightlois)
- ig-sinicyn (@ig-sinicyn)
- Matt Warren (@mattwarren)
Thank you very much!
Additional details
Milestone: v0.9.6
Date: May 11, 2016
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.6
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.6-beta
- https://www.nuget.org/packages/BenchmarkDotNet.Diagnostics.Windows/0.9.6
BenchmarkDotNet v0.9.5
- Added validators, JitOptimizationsValidator detects all non-optimzied dlls that were referenced #134
- Strong naming #101
- Add
IOrderProvider
#107 - Putting all the generated artifacts in a separate folder: ./BenchmarkDotNet.Artifacts/results and ./BenchmarkDotNet.Artifacts/bin #94
- Printing dotnet cli version for .NET Core and Dnx451, informing user when not installed. Closed #128
- Supporting assembly redirects #67
- Changed used msbuild version: 12 for .NET 4.5 (VS 2013), 14 for .NET 4.6 (VS 2015). Closed #132 and #137
- Switched to new ‘dotnet’ target framework monikers (dotnet5.4 instead of dnxcore50), why
- dnx452, dnx46, net462 support added
- Executing single Benchmark for multiple Runtimes also with Diagnoser attached (see #117)
- Misc minor changes
Milestone details
In the v0.9.5 scope, 13 issues were resolved and 0 pull requests were merged. This release includes 45 commits by 4 contributors.
Resolved issues (13)
- #67 F# requiring assembly binding redirects for FSharp.Core
- #94 Put all the generated artifacts in a separate folder
- #101 Strong naming?
- #107 Specify benchmark method order
- #122 Reports: Move params columns next to Method column
- #128 Print dotnet cli version in EnvironmentInfo
- #129 Improve DnxAndCoreTests
- #132 [Bug] FileNotFoundException On 0.9.4.
- #134 [Feature request] Release builds only?
- #137 Brand new machine with VS 2015 only b0rks
- #142 [Suggestion] BenchmarkDotNet.Analyzers.IAnalyser - use same spelling for namespace and type?
- #148 Crash on [Params] with a string value that contains an invalid path char
- #150 Declaring nested enums and using them as parameter value make incorrectly generated code/
Merged pull requests (0)
Commits (45)
- 2645ef use AutoGenerateBindingRedirects to avoid assembly conflicts, fixes #67 (by @adamsitnik)
- 693b21 warn user if dotnet cli is not installed and print it's version in summary, f... (by @adamsitnik)
- bfb017 target NET46 to reference msbuild 14 that comes with VS 2015 to make BDN work... (by @adamsitnik)
- fceb3c fallback to bat if MSBuild dlls are not found + generate bat when needed (by @adamsitnik)
- 49bdf0 restore: generating build script file (now for all runtimes) (by @adamsitnik)
- b9b0bc scripts: cleanup -> build -> show failed tests if any ->cleanup, fixes #129 (by @adamsitnik)
- ad64d8 Put all the generated artifacts in a separate folder, fixes #94 (by @adamsitnik)
- 902de6 F# samples targeting .NET Core +classic F# part reorganization (by @adamsitnik)
- b31c0b supported languages: updated readme & integration tests for Visual Basic (by @adamsitnik)
- 24ade7 handle missing MSBuild.dll, get latest msbuild in fallback script scenario, s... (by @adamsitnik)
- d371de Spelling mistake in errors message (see #139) (by @mattwarren)
- c882dd core: dependencies cleanup + getting rid of warnings (by @adamsitnik)
- b14e35 Add IOrderProvider, fixes #107 (by @AndreyAkinshin)
- c95267 warn user if non-optimized dll is used, fixes #134 (by @adamsitnik)
- 5876f5 Strong naming, fixes #101 (by @adamsitnik)
- 036168 Analys(z)ers unification, lets use single spelling, fixes #142 (by @adamsitnik)
- 2fa5c0 Update README.md (by @JohanLarsson)
- 8b8641 Merge pull request #145 from JohanLarsson/master (by @AndreyAkinshin)
- 734533 introducing Validators: validate benchmarks before running, return errors in ... (by @adamsitnik)
- eaa943 ExecutionValidator: allow users to verify that all their benchmarks are runna... (by @adamsitnik)
- e4fa4b support overriding with 'stronger' validators, eliminate duplicates (by @adamsitnik)
- 57666a Add column order for SummaryTable, fixes #122 (by @AndreyAkinshin)
- 62af92 Minor fixes in README (by @AndreyAkinshin)
- 5e6877 updated README (by @adamsitnik)
- 1255a4 Initial work on BenchmarkDotNet.Diagnostics.Windows rename (by @mattwarren)
- 59ca8c Ensure renamed diagnostics dll is loaded (BenchmarkDotNet.Diagnostics.Windows... (by @mattwarren)
- 825193 Added info about Diagnosers (by @mattwarren)
- b836c5 Spelling/formatting (by @mattwarren)
- 3f74c7 Fixing project.json (after I overwrite previous changes) (by @mattwarren)
- c24a78 Merge branch 'develop' of https://github.com/PerfDotNet/BenchmarkDotNet into ... (by @mattwarren)
- 8c678f reflecting recent Diagnosers->Diagnostics.Windows changes (by @adamsitnik)
- 9bcdca Executing single Benchmark for multiple Runtimes [with Diagnoser attached] #117 (by @adamsitnik)
- 4dffdb Switching to new ‘dotnet’ target framework monikers (by @adamsitnik)
- 81b1e4 improved Runtimes descriptions + .NET 4.6.2 support (by @adamsitnik)
- 8e92e1 dnx452 and dnx46 support (by @adamsitnik)
- 06efde Fix in BaselineDiffColumnTest, see also #122 (by @AndreyAkinshin)
- f79f83 DEVELOPING.md: use stable version of dotnet cli (by @AndreyAkinshin)
- c2206d BenchmarkDotNet/project.json: correct version for System.IO.FileSystem (by @AndreyAkinshin)
- 1b650d Support for nested Enums as Params values, fixes #150 (by @adamsitnik)
- 76ef44 characters as Params support, including invalid path characters, fixes #148 (by @adamsitnik)
- 14e45c Distinct jobs to avoid possible duplication when config is doubled (by @adamsitnik)
- 837254 cleanup (by @adamsitnik)
- d0cf6b added NETCore.Platforms dependency to make dotnet cli restore our Core projects (by @adamsitnik)
- f7a20e replacing the chars that are invalid for file names, not only paths #148 (by @adamsitnik)
- e31872 Set library version: 0.9.5 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Johan Larsson (@JohanLarsson)
- Matt Warren (@mattwarren)
Thank you very much!
Additional details
Milestone: v0.9.5
Date: May 02, 2016
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.5
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.5-beta
BenchmarkDotNet v0.9.4
- Improved messages about error in benchmarks, see #104
- Natural sort order, see #92, #95, #97
- Improved
double
/float
/decimal
/enum
support for Params, see #96, #105, #116 - Now environment info includes information about
HardwareTimerKind
andJitModules
- Added
DryConfig
- Improved export performance, closed #119, merged #124
- Better cmd-line discoverability (see #78), e.g. run
Benchmark.exe --help
and some useful information will be printed - Supporting all kinds of references for generated project (exact version, custom paths, GAC, sub-folders, dependent assemblies not copied), closed #41, #49, #72, #123, merged #125
- Friendliness to LinqPad restored, closed #66, merged #125
Milestone details
In the v0.9.4 scope, 13 issues were resolved and 2 pull requests were merged. This release includes 55 commits by 4 contributors.
Resolved issues (13)
- #41 Seems, not supported "sub-folder"
- #49 Dependent assemblies are not copied or added to the project file.
- #72 Referenced assembly dll-file (directly via file) not referenced in generated Program.csproj
- #78 Better command line discoverability (assignee: @mattwarren)
- #92 Results in the R graphs aren't displayed in a "Natural Sort Order"
- #95 Results should preserve the order of param values definition
- #96 Implement enums as valid Param for test
- #97 Params changes an order
- #104 System.InvalidOperationException: StatSummary: Sequence contains no elements
- #105 Params Attribute bug with float type
- #116 Issue when ParamAttribute decorated property is double and current system culture has comma as decimal separator
- #119 For large benchmarks report exporting is very, very slow and has a massive Gen2 heap
- #123 Can not run benchmark that references custom framework library (like WindowsBase)
Merged pull requests (2)
- #124 Faster export (by @adamsitnik)
- #125 supporting all kinds of references for generated project (by @adamsitnik)
Commits (55)
- 74789d Sort results by Parameter, in a Natural Sort Order (by @mattwarren)
- fec115 ParameterComparer refacotring (by @AndreyAkinshin)
- 9d3856 Add information about JIT modules in EnvironmentHelper (by @AndreyAkinshin)
- 7667ee Adding TraceEvent library for parsing ETW Events (by @mattwarren)
- ae71f2 More work on the GC/Allocation diagnostics (by @mattwarren)
- efa739 Allow diagnosers to be run from cmd line or via [Config(..)] (by @mattwarren)
- 633f1c Throw an error when invalid Config(..) options are specified (by @mattwarren)
- 04678a Add information about HardwareTimerKind (by @AndreyAkinshin)
- 7f3cf0 Fix in GetCorrectTypeNameTest (by @AndreyAkinshin)
- d9b890 Fix in HardwareTimerKind (by @AndreyAkinshin)
- 416e36 Natural sort order for CsvMeasurementsExporter and plots, Fixed #92 (by @AndreyAkinshin)
- dfc54a Ensure we sort the results by Method Name/Description (by @mattwarren)
- fa6c62 Changed GCDiagnoser to inspect live ETW event stream instead of recording to ... (by @goldshtn)
- d3f7ce Params: float/double/decimal support, Fixed #105 (by @AndreyAkinshin)
- 7bce9b Params: enum support, Fixed #96 (by @AndreyAkinshin)
- 4890dd Merge pull request #106 from goldshtn/develop (by @mattwarren)
- 9072b9 More robust when a benchmark throws an exception (see #104) (by @mattwarren)
- 2b9162 Work on #73 - highlighting in the Console output (by @mattwarren)
- f62483 Work on #73 - highlighting in the Console output (by @mattwarren)
- a639d5 Work on #73 - highlighting in Markdown output (by @mattwarren)
- 1457fe Changing [ConfigWithDryJobs] -> [DryConfig] (by @mattwarren)
- 396b7d Diagnostics for "JIT In-lining" events (by @mattwarren)
- 7a1027 Merge remote-tracking branch 'origin/master' into develop (by @adamsitnik)
- 6ec7f0 GC Diagnosers: reference to nuget package, unit test for both CLASSIC and DNX (by @adamsitnik)
- 9e7059 Proper XML Doc comment for DryConfig attribute (by @mattwarren)
- ad6be7 README.md: update (by @AndreyAkinshin)
- a4d0b8 Merge branch 'master' into develop (by @adamsitnik)
- 71e911 perf: CSV export: less allocations, reusing JobShortInfo (by @adamsitnik)
- 409b5e perf: logging with less allocations (by @adamsitnik)
- be6bfc perf: simpified LoggerWithPrefix, no need to check for multiple lines because... (by @adamsitnik)
- ade8a1 perf: avoid string.Concat and string.PadLeft (by @adamsitnik)
- f070eb perf: reuse AllProperties, reduced complexity (by @adamsitnik)
- 57c88b perf: deffer export to enable continuous progress updates instead of single l... (by @adamsitnik)
- 40071d loggers: final cleanup and fix for doubled new lines for diagnosers (by @adamsitnik)
- c46854 supporting all kinds of references for generated project. This closes #49, cl... (by @adamsitnik)
- a36e34 Initial work on better cmd line discoverability (part of #78) (by @mattwarren)
- 3f0752 Better formatting in the Baseline column (by @mattwarren)
- 8ab1a2 More samples (by @mattwarren)
- 1981a3 Refactoring of ConfigParser code (part of #78) (by @mattwarren)
- 3d1eba Allows "Exporters" and "Analysers" to be specified via cmd line (part of #78) (by @mattwarren)
- 5d195a Allow "all" option, i.e. "exporters=all" (part of #78) (by @mattwarren)
- 2146b8 Added some tests for ConfigParser (by @mattwarren)
- 582e08 Merge pull request #124 from PerfDotNet/perf (by @AndreyAkinshin)
- 84e67d README: Update team section (by @AndreyAkinshin)
- 4d6001 README: add FAQ question (by @AndreyAkinshin)
- 43ade3 BenchmarkDotNet.Samples: add #CLASSIC_RELEASE in launchSettings (by @AndreyAkinshin)
- e3c2d1 README: some improvements (by @AndreyAkinshin)
- c416c4 use the highest used target framework version to avoid framework mismatches +... (by @adamsitnik)
- 8a49b3 Merge branch 'develop' into references (by @adamsitnik)
- 23b2ea integration tests for complex references scenarios (by @adamsitnik)
- ddfa4a classic: specify full name and use newer msbuild dlls to avoid calling extra bat (by @adamsitnik)
- 79e8eb code cleanup after LINQPad 4 & 5 verification (by @adamsitnik)
- 445137 Merge pull request #125 from PerfDotNet/references (by @AndreyAkinshin)
- 4f1e1f Update package description (by @AndreyAkinshin)
- 0f5531 Set library version: 0.9.4 (by @AndreyAkinshin)
Contributors (4)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Matt Warren (@mattwarren)
- Sasha Goldshtein (@goldshtn)
Thank you very much!
Additional details
Milestone: v0.9.4
Date: March 24, 2016
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.4
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.4-beta
BenchmarkDotNet v0.9.3
Milestone details
In the v0.9.3 scope, 2 issues were resolved and 1 pull requests were merged. This release includes 12 commits by 2 contributors.
Resolved issues (2)
Merged pull requests (1)
- #113 Core Clr support (by @adamsitnik)
Commits (12)
- 5b6460 Core: compilable main project (by @adamsitnik)
- cfdde6 Core: compilable samples and tests projects (by @adamsitnik)
- ab8b26 Core: new profile for running Samples from VS (by @adamsitnik)
- 9e1372 Core: new toolchain implementation with dnx451 code reuse (by @adamsitnik)
- de8bcc Core: tests: script to run both dnx and core (by @adamsitnik)
- 05d50f Core: dotnet cli supports only x64 now, workaround (by @adamsitnik)
- 726c66 Core: executing only supported benchmarks (x86 and Legacy Jit are not supported) (by @adamsitnik)
- de3371 Core: Dnx and Core as Runtimes, removed Toolchain configuration (by @adamsitnik)
- e7a3a8 Core: generating path in Linux-friendly way ;) (by @adamsitnik)
- fede7c Core: notify user when the process.Priority can not be set and continue execu... (by @adamsitnik)
- d59827 Merge pull request #113 from PerfDotNet/coreclr (by @AndreyAkinshin)
- 939891 Set library version: 0.9.3 (by @AndreyAkinshin)
Contributors (2)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
Additional details
Milestone: v0.9.3
Date: March 13, 2016
NuGet Packages:
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.3
- https://www.nuget.org/packages/BenchmarkDotNet/0.9.3-beta
BenchmarkDotNet v0.9.2
Milestone details
In the v0.9.2 scope, 1 issues were resolved and 1 pull requests were merged. This release includes 48 commits by 2 contributors.
Resolved issues (1)
- #51 DNX Compatibility
Merged pull requests (1)
- #87 DNX451 support (by @adamsitnik)
Commits (48)
- f25427 road to DNX: part I: moving from csproj to xproj (by @adamsitnik)
- 2fe5cf road to DNX: part II: added dnx451 target (DNX SDK running on .Net 4.5.1) (by @adamsitnik)
- 6b4400 road to DNX: part II: the moment when Unit Test has shown up in VS! (by @adamsitnik)
- c97792 road to DNX: part II: able to debug Samples (by @adamsitnik)
- f901d6 road to DNX: part II: the moment when Integration Test has shown up in VS! (by @adamsitnik)
- f46296 road to DNX: part II: including *.txt files as resources, excluding auto-gene... (by @adamsitnik)
- cfc1b6 updated gitignore to exclude files created during integration tests run (by @adamsitnik)
- 60b343 Road to DNX: benchmark execution : building project.json instead of .csproj (by @adamsitnik)
- 0d41cb Road to DNX: benchmark execution : compiling project.json with Microsoft.Dnx.... (by @adamsitnik)
- 31bc59 updated versions in .json files after sync with master, (by @adamsitnik)
- c8e826 road to DNX: compilation: adding MetadataReferences for dlls required to comp... (by @adamsitnik)
- 2ebe6c road to DNX: compilation: adding executing assembly as dependency to project.... (by @adamsitnik)
- 76a74e Road to DNX: removing dependencies to BenchmarkDotNet.Diagnostics for DNX451 ... (by @adamsitnik)
- 40419a road to DNX: handling "nuget-like" package versions that can contain text (as... (by @adamsitnik)
- 8f06a7 it should have never happened but it does when debugging: DirectoryNotFoundEx... (by @adamsitnik)
- 7c2a96 Road to DNX: reusing MS dnu to restore and build. Simple solution that just w... (by @adamsitnik)
- e51d4d Road to DNX: alternative to MS dnu. reuses nuget and roslyn but as for now it... (by @adamsitnik)
- ada7cb Road to DNX: replacing dnu build with dnx run. +putting files in a folder tha... (by @adamsitnik)
- 18e969 road to DNX: referencing the right thing, bitness the same as hosting process (by @adamsitnik)
- 8e870c road to DNX: setting the compiler EXPLICIT to finally make it WORKING (at lea... (by @adamsitnik)
- 466d13 Road to DNX: removing failed PoC,dependencies cleanup, added some comments (by @adamsitnik)
- 5b3675 Road to DNX: removing dependencies to MSBuild for DNX target, some project.js... (by @adamsitnik)
- 3e65e8 road to DNU: reference project during development, but package when released (by @adamsitnik)
- 617a61 road to DNX: logging output from dnu restore/dnx run + default timeout (by @adamsitnik)
- 075cdc road to DNX: new value for toolchain enum: DNX451 (by @adamsitnik)
- bd3fea road to DNX: being able to debug NET40 from VS (by @adamsitnik)
- da5a9a road to DNX: copying all files that used to be copied in ".csproj times" (by @adamsitnik)
- 5d8717 road to DNX: new debug profile with DNX trace mode ON, use when troubleshooti... (by @adamsitnik)
- 8272f6 road to DNX: fixing tests (by @adamsitnik)
- 96bcf8 road to DNX: make sure that our child process get the right priority and affi... (by @adamsitnik)
- cd0ba8 road to DNX: respecting specified benchmark processor architecture (by @adamsitnik)
- b1eb28 road to DNX: added all output files from integration tests to .gitignore (by @adamsitnik)
- aa62d1 fix for 4.0 (was passing arguments in wrong order) (by @adamsitnik)
- 0c1251 merge (by @adamsitnik)
- 46cd5e F# support, limited to existing tools possibilities (can not run from VS, onl... (by @adamsitnik)
- 74020c Merge remote-tracking branch 'upstream/master' (by @adamsitnik)
- 3402f0 replacing dnx with dotnet cli (by @adamsitnik)
- d634f4 road to DNX: final cleanup (by @adamsitnik)
- 24cd3a removing project.lock.json files (by @adamsitnik)
- 80becb removing all .csproj & packages.config file + keeping only single .sln file (by @adamsitnik)
- 9633d5 removing nuspec (now auto-generated by VS based on project.json) + version in... (by @adamsitnik)
- 617d82 running Classic Framework tests from console + minor cleanup (by @adamsitnik)
- fc9d98 DNX: running once compiled assembly directly without dotnet cli (perf+abble t... (by @adamsitnik)
- 8adad8 dnx: Diagnosers support. Currently only these which do not need umanaged libs... (by @adamsitnik)
- 34c3c9 DNX: changed folder of the auto-generated files to benchmark-specific + samples (by @adamsitnik)
- 9cf009 DNX: description for development (by @adamsitnik)
- 43af33 update to dotnet cli changes: output path and exit codes , now we set output... (by @adamsitnik)
- f59d3e Merge pull request #87 from adamsitnik/master (by @AndreyAkinshin)
Contributors (2)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
Additional details
Milestone: v0.9.2
Date: March 5, 2016
NuGet Packages:
BenchmarkDotNet v0.9.1
Milestone details
In the v0.9.1 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 5 commits by 2 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (5)
- a0cfba use benchmarkSwitcher and 0.9.0 api features (by @cloudRoutine)
- a88fc0 Merge pull request #89 from cloudRoutine/patch-1 (by @AndreyAkinshin)
- 99d7c5 Improved ReflectionExtensions.GetCorrectTypeName; Fixed #90 (by @AndreyAkinshin)
- 770510 Improved work with idle method that returns a value type; Fixed #70 (by @AndreyAkinshin)
- 3c4410 Set library version: 0.9.1 (by @AndreyAkinshin)
Contributors (2)
- Andrey Akinshin (@AndreyAkinshin)
- Jared Hester (@cloudRoutine)
Thank you very much!
Additional details
Date: February 10, 2016
NuGet Packages:
BenchmarkDotNet v0.9.0
- New API
- Autodetermination of amount iteration for warmup/target idle/main iterations, duration of iteration, amount of CLR launches.
Milestone details
In the v0.9.0 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 34 commits by 4 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (34)
- 71369d Add benchmarks to tests different ways of accessing arrays. Copypasted from h... (by @alexandrnikitin)
- 9a5930 Merge pull request #79 from alexandrnikitin/samples-array-access (by @AndreyAkinshin)
- 1b8cf9 MathSummaryTests: fix output (by @AndreyAkinshin)
- 92503b BenchmarkSwitcher improvements (by @AndreyAkinshin)
- ebaeea Big API refactoring (by @AndreyAkinshin)
- f149cb Big API refactoring, Part 2 (by @AndreyAkinshin)
- 380d9a Big API refactoring, Part 3 (by @AndreyAkinshin)
- 6cd2ce Big API refactoring, Part 4 (by @AndreyAkinshin)
- 1665d8 Big API refactoring, Part 5 (by @AndreyAkinshin)
- 140312 A better way of running a F# integration test (by @mattwarren)
- 8e58ab Big API refactoring, Part 6 (by @AndreyAkinshin)
- 9ec71b Add html export, resolved #75 (by @alinasmirnova)
- 7ae4ed Merge pull request #86 from alinasmirnova/refactoring (by @AndreyAkinshin)
- bfbc80 Big API refactoring, Part 7 (by @AndreyAkinshin)
- 256ed4 Re-design of the IDiagnoser API (by @mattwarren)
- f4bad8 Initial work on ETW Diagnostic Providers (by @mattwarren)
- da2e3f Big API refactoring, Part 8 (by @AndreyAkinshin)
- 5df553 Big API refactoring, Part 9 (by @AndreyAkinshin)
- 120b7c Big API refactoring, Part 10 (by @AndreyAkinshin)
- e61425 Big API refactoring, Part 11 (by @AndreyAkinshin)
- 171ba0 Big API refactoring, Part 12 (by @AndreyAkinshin)
- 854633 Big API refactoring, Part 13 (by @AndreyAkinshin)
- caafa9 Fix a bug in Templates/BenchmarkProgram.txt (by @AndreyAkinshin)
- 568c44 Add BenchmarkDotNet.Samples.FSharp (by @AndreyAkinshin)
- 2fa773 Fix a bug in Generator (by @AndreyAkinshin)
- 30e855 Update README (by @AndreyAkinshin)
- 1164ef Update README (by @AndreyAkinshin)
- 9c357c Improved plots for benchmarks with Params (by @AndreyAkinshin)
- ef41f6 Fix a bug in ClassicBuilder (by @AndreyAkinshin)
- 02babc Add BaselineDiffColumn.Scaled (by @AndreyAkinshin)
- 4388c8 Remove construction with description in BenchmarkAttribute (by @AndreyAkinshin)
- c9c25f Update README (by @AndreyAkinshin)
- 1cef82 RPlotExporter improvements (by @AndreyAkinshin)
- 173abf Set library version: 0.9.0 (by @AndreyAkinshin)
Contributors (4)
- Alexandr Nikitin (@alexandrnikitin)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin (@AndreyAkinshin)
- Matt Warren (@mattwarren)
Thank you very much!
Additional details
Date: February 9, 2016
NuGet Packages:
BenchmarkDotNet v0.8.2
- Changes in the Summary table
- Summary table now supports ResultExtenders that can add new column to the table
- Now we use StandardError (aka
Error
) as the main accuracy metric - Columns
op/s
,StdDev
are disabled by default (you can add it via ResultExtenders)
- Statistic improvements, now you have detailed statistic in the console log like follows:
Mean = 118.5298 us, StdError = 1.2863 us (N = 30, StdDev = 7.0454 us)
Min = 109.1602 us, Median = 117.1794 us, Max = 132.5764 us
IQR = 10.1244 us, LowerFence = 98.0834 us, UpperFence = 138.5810 us
ConfidenceInterval = [116.0086 us; 121.0510 us] (CI 95%)
- Added the
Baseline
feature, see #64 - Export improvements, now you have files
<BenchmarkName>-report-github.md
,<BenchmarkName>-report-stackoverflow.md
for easy publishing results on GitHub and StackOverflow. - Basic plotting. Added new
BenchmarkRPlotExporter
that createsBuildPlots.R
in the bin directory. It is an R script that generates boxplot and barplot for your benchmarks (you should have installed R with definedR_HOME
environment variable) - Updated environment info
- Added Stopwatch
Frequency
andResolution
- Split common benchmark properties (like
Mode
,Platform
,Runtime
) in several lines (3 properties per line)
- Added Stopwatch
- Log improvements: add total time, statistics, list of exported files
- Bug fixes
Milestone details
In the v0.8.2 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 34 commits by 3 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (34)
- de0140 Add BenchmarkEnvironmentAnalyser (by @AndreyAkinshin)
- 9ea78f Improved confidence intervals (by @AndreyAkinshin)
- b8d4b6 Rename: PreWarmup -> Pilot (by @AndreyAkinshin)
- 988efc Reporting: change StandardDeviation to StandardError (by @AndreyAkinshin)
- 4da39d Big refactoring (by @AndreyAkinshin)
- 6a0caa Add BenchmarkRPlotExporter (by @AndreyAkinshin)
- 3a6ea4 Allow plugins to extend the Results Table (by @mattwarren)
- 7a7991 Create a "Result Extender" plug-in for #64 (by @mattwarren)
- 70ea89 Integration tests for #64 (by @mattwarren)
- a2d0ec Separate class for string extensions. (by @alinasmirnova)
- 5d6c78 Multiline prefix string extension. (by @alinasmirnova)
- bdd84e New logger type for adding prefix. StackOverflow markdowns. (by @alinasmirnova)
- ba9ec5 Move ExportToFile to ExporterBase. Add file suffix. (by @alinasmirnova)
- 38cd8c GitHub markdown support. (by @alinasmirnova)
- 732420 Markdown readme edits (by @alinasmirnova)
- 541eef Merge pull request #71 from alinasmirnova/refactoring (by @AndreyAkinshin)
- c53618 Merge remote-tracking branch 'refs/remotes/origin/develop' into refactoring (by @AndreyAkinshin)
- e3f420 Samples: add Intro_08_Baseline (by @AndreyAkinshin)
- 145b78 README: add NuGet badge (by @AndreyAkinshin)
- b0e108 Minor fixes (by @AndreyAkinshin)
- 565c25 Update README (by @AndreyAkinshin)
- 045e2a Add BenchmarkStatResultExtender (by @AndreyAkinshin)
- 20c6d2 Minor fixes (by @AndreyAkinshin)
- f80edc Update README (by @AndreyAkinshin)
- 3d2309 README: links to wiki (by @AndreyAkinshin)
- d60d0f Fix bug in TimeUnit (by @AndreyAkinshin)
- 034961 Unit tests for TimeUnit (by @AndreyAkinshin)
- f2c6f1 Logs: add total time (by @AndreyAkinshin)
- 140dec Merge branch 'refs/heads/refactoring' into develop (by @AndreyAkinshin)
- 9e16e8 Ensure that the DeltaResultExtender doesn't throw (by @mattwarren)
- 60f7c9 Merge branch 'develop' of https://github.com/PerfDotNet/BenchmarkDotNet into ... (by @mattwarren)
- 77b24b Rollback of bad changes from the last merge (by @AndreyAkinshin)
- 3df71a More robust way of wiring up BenchmarkBaselineDeltaResultExtender (by @mattwarren)
- 8e5a0e Set library version: 0.8.2 (by @AndreyAkinshin)
Contributors (3)
- Alina Smirnova (@alinasmirnova)
- Andrey Akinshin (@AndreyAkinshin)
- Matt Warren (@mattwarren)
Thank you very much!
Additional details
Date: January 19, 2016
NuGet Packages:
BenchmarkDotNet v0.8.1
Milestone details
In the v0.8.1 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 12 commits by 2 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (12)
- 79ee93 README.md: small fixes (by @AndreyAkinshin)
- a3e2dc Adding missing CLRMD binary dependencies (by @mattwarren)
- 7492c1 Merge branch 'master' of https://github.com/PerfDotNet/BenchmarkDotNet (by @mattwarren)
- ddae06 Lazy-load the Diagnostic plug-ins, fixes #63 (by @mattwarren)
- 5df0df More robust version of the Diagnostic Library (see #53) (by @mattwarren)
- 9f3ba0 Ensure that non-void SingleRun Benchmarks work (by @mattwarren)
- de5bca Allow Benchmarks that use Inner classes (see #55) (by @mattwarren)
- 5d000f Ensure we can run Benchmarks produced by F# (see #59) (by @mattwarren)
- 8b0563 Added missing binary dependency (part of #59) (by @mattwarren)
- 60047e Fixing #45 (by @mattwarren)
- 3bede9 Implemented Ctrl-C handling in the Console (Fixes #50) (by @mattwarren)
- 719391 Set library version: 0.8.1 (by @AndreyAkinshin)
Contributors (2)
- Andrey Akinshin (@AndreyAkinshin)
- Matt Warren (@mattwarren)
Thank you very much!
BenchmarkDotNet v0.8.0
Milestone details
In the v0.8.0 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 67 commits by 5 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (67)
- 042631 Atomics sample (by @redknightlois)
- 6ce693 Merge pull request #35 from redknightlois/master (by @AndreyAkinshin)
- e73ce4 Update Intro_03_SingleRun (by @AndreyAkinshin)
- add75c Samples: add Js_AsVsCast (by @AndreyAkinshin)
- 1d4653 Samples: updates Js_AsVsCast (by @AndreyAkinshin)
- 73f48f BenchmarkRuntime support (by @AndreyAkinshin)
- 8e9fec BenchmarkRuntime: fix a bug (by @AndreyAkinshin)
- 0d8a86 Added RotateBits (will be interested when https://github.com/dotnet/coreclr/i... (by @redknightlois)
- 724970 Added and special case which we know it must not be optimized at all (for com... (by @redknightlois)
- 30ba93 Merge pull request #43 from redknightlois/master (by @AndreyAkinshin)
- a2338c Big refactoring (by @AndreyAkinshin)
- dc8d02 Make the "Getting Started" guide read better (by @mattwarren)
- 9883ca Update README.md (by @mattwarren)
- 3cd76b Update README.md (by @mattwarren)
- 6a3d00 Update README.md (by @mattwarren)
- 7de832 Better way of generating Benchmark competition list (by @mattwarren)
- 10ded0 Add Jit_GenericsMethod (by @AndreyAkinshin)
- e5538b Fix for #42 (make benchmarks work in LINQPad) (by @mattwarren)
- 873450 Make logging robust when strings contain '{' or '} (by @mattwarren)
- 2ee55a Create a batch file that builds the benchmark (by @mattwarren)
- d14b18 Adding "Advanced Features" section (by @mattwarren)
- deb1a9 Sample benchmark for different types of loops (by @mattwarren)
- 26e7b0 Move sample to correct namespace (by @mattwarren)
- 505711 Grouping parameter results together (fixes #36) (by @mattwarren)
- 1ee786 Merge branch 'master' of https://github.com/PerfDotNet/BenchmarkDotNet (by @mattwarren)
- 496ae1 Add support for benchmarking methods of generic classes (#44) (by @mattwarren)
- ad12e1 Return of the Params (by @AndreyAkinshin)
- f80613 Little cleanup (by @AndreyAkinshin)
- 52a076 Little refactoring (Flow -> Toolchain) (by @AndreyAkinshin)
- 2f383e Moar samples (by @mattwarren)
- 30b162 Initial work on code for asm/IL viewing (by @mattwarren)
- 6a8873 Initial support for printing Assembly code (by @mattwarren)
- 8cd841 Print diagnostic info (with flag "-printDiagnostics") (by @mattwarren)
- 236043 Adding missing CLRMD dependancies (by @mattwarren)
- 58b7a3 Print the method when we have a "call" asm instruction (by @mattwarren)
- 1dae2b Change Jit_GenericsMethod benchmark to reproduce on x64 both Legacy & RuyJit (by @alexandrnikitin)
- 6ae157 Merge pull request #47 from alexandrnikitin/samples-Jit_GenericsMethod-x64repro (by @AndreyAkinshin)
- c39b7c README: add gitter link (by @AndreyAkinshin)
- b0768e Ensure we "close" the code section in the markdown we generate (by @mattwarren)
- 6c9ae7 Merge branch 'master' of https://github.com/PerfDotNet/BenchmarkDotNet (by @mattwarren)
- 9ed66d Show how you can write "Performance" Unit Tests (by @mattwarren)
- 7c9c6d Helper methods for Performance Unit Tests (by @mattwarren)
- 3a2c75 Make Perf Unit Test more robust!! (by @mattwarren)
- d1ddd3 Ensure the Description is used when sorting (if available) (by @mattwarren)
- 27d662 Moving assembly viewer into BenchmarkDotNet.Diagnostics (by @mattwarren)
- 1ef961 Load BenchmarkDotNet.Diagnostics dynamically (by @mattwarren)
- 7eb70a New plugin system (by @AndreyAkinshin)
- 2114d7 Fix typos in API (by @AndreyAkinshin)
- e0a488 Fix in PerformanceUnitTest (by @AndreyAkinshin)
- 02cddd BenchmarkDotNet.Tests: upgrade xunit to 2.1 (by @AndreyAkinshin)
- 3d8ff2 IntegrationTests: replace GetTestOutput by AccumulationLogger (by @AndreyAkinshin)
- 5ebf69 IntegrationTests: upgrade xunit to 2.1 (by @AndreyAkinshin)
- 280834 Diagnostic refactoring (by @AndreyAkinshin)
- 79ee42 Custom toolchains (by @AndreyAkinshin)
- 527df6 Analysers (by @AndreyAkinshin)
- 3d8199 Fix in BuildTable (by @AndreyAkinshin)
- 699588 Tidy up of Source Diagnoser code (part of #53) (by @mattwarren)
- 5ab029 Better way of getting the called method name (part of #53) (by @mattwarren)
- 37f468 Integration test for Source Diagnostics (see #53) (by @mattwarren)
- da0093 Spelling mistakes and remove unused using stmts (by @mattwarren)
- fbf409 Fix typo in README (by @ForNeVeR)
- 4895c6 Merge pull request #61 from ForNeVeR/patch-1 (by @AndreyAkinshin)
- dd5f1f Rename: exec -> execute (by @AndreyAkinshin)
- 6826a9 BenchmarkSwitcher: update the promt message (by @AndreyAkinshin)
- f2a63f Update README.md (by @AndreyAkinshin)
- 54cfdc Samples/Program.cs: small fix (by @AndreyAkinshin)
- a927e9 Set library version: 0.8.0 (by @AndreyAkinshin)
Contributors (5)
- Alexandr Nikitin (@alexandrnikitin)
- Andrey Akinshin (@AndreyAkinshin)
- Federico Andres Lois (@redknightlois)
- Friedrich von Never (@ForNeVeR)
- Matt Warren (@mattwarren)
Thank you very much!
BenchmarkDotNet v0.7.8
Milestone details
In the v0.7.8 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 36 commits by 5 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (36)
- 6ede76 Reporting: better number formats for ops/sec. (by @ppanyukov)
- 118bc9 Merge pull request #17 from ppanyukov/feature/report-num-align (by @AndreyAkinshin)
- 994cbc Markdown friendly reporting (by @AndreyAkinshin)
- 91bbb4 Reporting: use fixed precision for AvrTime and StdDev. (by @ppanyukov)
- e9b8fe Merge pull request #18 from ppanyukov/feature/report-num-align (by @AndreyAkinshin)
- 121c3d Reporting: uniform time units across all benchmarks. (by @ppanyukov)
- 1cb520 Merge pull request #21 from ppanyukov/feature/report-num-align (by @AndreyAkinshin)
- a4f53e Reporting: refactor use of BenchmarkTimeSpan. (by @ppanyukov)
- 7fbf63 Merge pull request #24 from ppanyukov/feature/report-num-align (by @AndreyAkinshin)
- c8c893 message for Obsolete warning which tells what to use now + updated README (by @adamsitnik)
- b48756 Merge pull request #26 from adamsitnik/master (by @AndreyAkinshin)
- 36f849 Add Jit_RegistersVsStack (by @AndreyAkinshin)
- 32cafc Allow a [Setup] method to be used on Benchmarks (by @mattwarren)
- 8a14a8 Missed out of last commit (by @mattwarren)
- 0103b7 Integration tests for [Setup] method closes #23, closes #7 (by @mattwarren)
- 1e7c25 Display MSBuild errors in the console output, see #22 (by @mattwarren)
- 876303 Added new benchmark for Stopwatch v DateTime (by @mattwarren)
- e5f748 New ReportExporter system (by @AndreyAkinshin)
- e0fdbc Add BenchmarkDotNet.Visualizer (by @AndreyAkinshin)
- 954d08 Fix bug in op/s reporting (by @mattwarren)
- d9dcf4 Tidying up BenchmarkDotNet.Samples layout see #29 (by @mattwarren)
- 7abb1b Making Visualizer samples point to the new location (see #29) (by @mattwarren)
- 96d5b9 Speed up the integration tests, closes #23 (by @mattwarren)
- 2568a1 Initial work on Params attribute (see #8) (by @mattwarren)
- 47fad8 Ensure Benchmarks with Params show up properly in Reports (by @mattwarren)
- 36e060 Integration tests and sample for Params attribute (by @mattwarren)
- 76ad88 Fixing some spelling mistakes (by @mattwarren)
- 81e6eb Update BenchmarkProgram.txt (by @mattwarren)
- 4008cf Merge pull request #32 from PerfDotNet/mattwarren-exception-handling (by @mattwarren)
- 9e893e Statistic improvements (by @AndreyAkinshin)
- 9ce9f9 Ensure that Params attribute can work with static fields/properties (by @mattwarren)
- 7c3782 Update README.md (by @AndreyAkinshin)
- 5a1783 Update Array_HeapAllocVsStackAlloc.cs (by @mattwarren)
- 50ff16 Allow just number param in RunCompetitions. (by @vkkoshelev)
- 04c306 Merge pull request #34 from vedun-z/master (by @AndreyAkinshin)
- a630dc Set library version: 0.7.8 (by @AndreyAkinshin)
Contributors (5)
- Adam Sitnik (@adamsitnik)
- Andrey Akinshin (@AndreyAkinshin)
- Matt Warren (@mattwarren)
- Philip Panyukov (@ppanyukov)
- vkkoshelev (@vkkoshelev)
Thank you very much!
BenchmarkDotNet v0.7.7
Milestone details
In the v0.7.7 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 14 commits by 2 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (14)
- c94525 Add Cpu_BranchPerdictor (by @AndreyAkinshin)
- 44cbb0 Add Algo_Md5VsSha256 (by @AndreyAkinshin)
- 4d789c Most significant bit and bool to int conversions. (by @redknightlois)
- 09446b Updated to avoid using an array. (by @redknightlois)
- b16153 Fixed a bug where converting a bool to int instead to byte (which is the nati... (by @redknightlois)
- 52acca Merge pull request #15 from redknightlois/master (by @AndreyAkinshin)
- 66cce4 Fix troubles with inlining (by @AndreyAkinshin)
- a8e641 Fixes in Jit_BoolToInt (by @AndreyAkinshin)
- cfbb88 Rename task parameters: Current -> Host (by @AndreyAkinshin)
- 209b4f Rename Task to BenchmarkTask, fix #9 (by @AndreyAkinshin)
- 74be9d Fix typos (by @AndreyAkinshin)
- adc6c2 Fix Intro_01_MethodTasks (by @AndreyAkinshin)
- 438042 Add BenchmarkRunner.RunUrl (by @AndreyAkinshin)
- 72d606 Set library version: 0.7.7 (by @AndreyAkinshin)
Contributors (2)
- Andrey Akinshin (@AndreyAkinshin)
- Federico Andres Lois (@redknightlois)
Thank you very much!
BenchmarkDotNet v0.7.6
Milestone details
In the v0.7.6 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 9 commits by 5 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (9)
- 8e9942 Update README.md (by @NN---)
- 51ef26 Merge pull request #11 from NN---/patch-2 (by @AndreyAkinshin)
- db8791 Fixed link to samples. (by @redknightlois)
- 14ddf4 Merge pull request #12 from redknightlois/patch-1 (by @mattwarren)
- d70b4c Accessibility and genericness checks added for benchmark methods. (by @krk)
- 04ce12 Benchmark methods defined in nested classes are supported. (by @krk)
- a5caba Improvements in log parser (by @AndreyAkinshin)
- d750b9 Merge pull request #13 from krk/master (by @AndreyAkinshin)
- eab4bd Set library version: 0.7.6 (by @AndreyAkinshin)
Contributors (5)
- Andrey Akinshin (@AndreyAkinshin)
- Federico Andres Lois (@redknightlois)
- Kerem Kat (@krk)
- Matt Warren (@mattwarren)
- NN (@NN---)
Thank you very much!
BenchmarkDotNet v0.7.5
Milestone details
In the v0.7.5 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 4 commits by 1 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (4)
- 957a01 Update samples (by @AndreyAkinshin)
- 118e2f Add the Cpu_Ilp_RyuJit sample (by @AndreyAkinshin)
- b7e564 Update copyrights (by @AndreyAkinshin)
- b6cce3 v0.7.5: Improved project building (by @AndreyAkinshin)
Contributors (1)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
BenchmarkDotNet v0.7.4
Milestone details
In the v0.7.4 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 2 commits by 1 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (2)
- c5e924 Update README (by @AndreyAkinshin)
- 641c95 v0.7.4: New benchmark Invoker, new samples, refactoring, minor fixes (by @AndreyAkinshin)
Contributors (1)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
BenchmarkDotNet v0.7.3
Milestone details
In the v0.7.3 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 1 commits by 1 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (1)
- 42e13b v0.7.3: Small bug fixes (by @AndreyAkinshin)
Contributors (1)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
BenchmarkDotNet v0.7.2
Milestone details
In the v0.7.2 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 2 commits by 1 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (2)
- 19f1e2 Add templates for BenchmarkProjectGenerator (by @AndreyAkinshin)
- 043c04 v0.7.2: BenchmarkMode.Throughput, OperationCountAttribute, minor improvements... (by @AndreyAkinshin)
Contributors (1)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
BenchmarkDotNet v0.7.1
Milestone details
In the v0.7.1 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 4 commits by 1 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (4)
- b2bc76 A bugfix (MSBuild fail case) (by @AndreyAkinshin)
- ce7f58 Improved SingleRun (by @AndreyAkinshin)
- 295cc2 Current values for JitVersion, Platform, and Framework (by @AndreyAkinshin)
- 744eba Set library version: 0.7.1 (by @AndreyAkinshin)
Contributors (1)
- Andrey Akinshin (@AndreyAkinshin)
Thank you very much!
BenchmarkDotNet v0.7.0
Milestone details
In the v0.7.0 scope, 0 issues were resolved and 0 pull requests were merged. This release includes 59 commits by 2 contributors.
Resolved issues (0)
Merged pull requests (0)
Commits (59)
- 7f1c49 Add ShiftVsMultiplyBenchmark (by @AndreyAkinshin)
- 21298c Renaming (by @AndreyAkinshin)
- 86aada Add ReverseSortProgram (by @AndreyAkinshin)
- 5830ef Add MakeRefVsBoxingProgram (by @AndreyAkinshin)
- fe121e Automatic adjustment WarmUpIterationCount (by @AndreyAkinshin)
- d3dd9c Improved console output (by @AndreyAkinshin)
- 5e5df2 Update IncrementProgram (by @AndreyAkinshin)
- dca61d Change Average statistic to Median (by @AndreyAkinshin)
- 9d57e6 Update README.md (by @AndreyAkinshin)
- 7cca77 StaticFieldProgram -> ArrayIterationProgram (by @AndreyAkinshin)
- e02906 Add ForeachArray and ForeachList programs (by @AndreyAkinshin)
- 8e3f6e Add StandardDeviation calculation (by @AndreyAkinshin)
- 8b0c50 Add BenchmarkSettings singleton with DetailedMode property (by @AndreyAkinshin)
- eae5bf Add useful arguments for console application (by @AndreyAkinshin)
- 6f15f0 Update README.md (by @AndreyAkinshin)
- c1c44b Add StackFrameProgram (by @AndreyAkinshin)
- bbc6e7 Update StackFrameProgram (by @AndreyAkinshin)
- 5f8121 Set version number and add NuGet package metadata (by @AndreyAkinshin)
- 9425cb Add ProcessorAffinity to settings (by @AndreyAkinshin)
- bcc037 Add single result benchmark mode (--single) and disable warmup mode (--disabl... (by @AndreyAkinshin)
- 4ce0b4 Add build.bat for Benchmarks project (by @AndreyAkinshin)
- 69fbc7 Add --output-file option (by @AndreyAkinshin)
- df2092 Update build system (by @AndreyAkinshin)
- addd25 Update run.bat (by @AndreyAkinshin)
- b5c154 Add Mono support to run.bat (by @AndreyAkinshin)
- a4b42a Update build system (by @AndreyAkinshin)
- 65bbf7 Benchmarks: add support of selecting target program via number (by @AndreyAkinshin)
- d4317b Add MedianTicks to CompetitionResult report in DetailedMode fixed #1 (by @AndreyAkinshin)
- 3999e0 Update README.md (by @AndreyAkinshin)
- bd7452 Update EnvironmentTickCount hack (by @AndreyAkinshin)
- cf7aa6 Add CultureInfo setting (by @AndreyAkinshin)
- 16bb5e Set BenchmarkDotNet version: 0.5.1 (by @AndreyAkinshin)
- 07cf52 Add CompetitionBase: now competitions can be created in form of unit tests. (by @mijay)
- 284b78 Full refactoring (by @AndreyAkinshin)
- 2943d9 Add BenchmarkDotNet.Samples project (by @AndreyAkinshin)
- 572483 Merge branch 'dev' (by @AndreyAkinshin)
- 324d99 Remove ReflectionVsExpressionCompetition (by @AndreyAkinshin)
- ce5c67 Add CacheConsiousBinarySearchCompetition (by @AndreyAkinshin)
- ba8725 Add SelectVsConvertAllCompetition (by @AndreyAkinshin)
- 60b002 Set BenchmarkDotNet version: 0.5.2 (by @AndreyAkinshin)
- 3a4213 Fix in GetBenchmarkMethodClean (by @AndreyAkinshin)
- 73ee56 Add BitCountCompetition (by @AndreyAkinshin)
- 72836a Add missed Clean in BenchmarkCompetitionTask, Fixed #4 (by @AndreyAkinshin)
- 1258cb Big refactoring (by @AndreyAkinshin)
- 03bf14 Attributes renaming (by @AndreyAkinshin)
- 98a3cd Improved environment info (by @AndreyAkinshin)
- fe6e4e New benchmarks: ArrayBoundEliminationCompetition, InstructionLevelParallelism... (by @AndreyAkinshin)
- c89054 Fix in EnvironmentHelper.GetConfiguration() (by @AndreyAkinshin)
- 90d260 Add icon (by @AndreyAkinshin)
- beb681 Improved WarmUp (by @AndreyAkinshin)
- 7a63b6 Big refactoring (by @AndreyAkinshin)
- 8197e5 Update samples (by @AndreyAkinshin)
- c8d348 Add BenchmarkProperties (by @AndreyAkinshin)
- 97c73a Update Cpu_InstructionLevelParallelism (by @AndreyAkinshin)
- 957714 Small fixes (by @AndreyAkinshin)
- fdf4dd Update README (by @AndreyAkinshin)
- 8ac1ab Merge branch 'big-refactoring' (by @AndreyAkinshin)
- 18a256 Small fixes (by @AndreyAkinshin)
- 20df13 NuGet version: 0.7.0 (by @AndreyAkinshin)
Contributors (2)
- Andrey Akinshin (@AndreyAkinshin)
- Mitya Kononchuk (@mijay)
Thank you very much!