Benchmark history for the async synchronization primitives in
CryptoHives.Foundation.Threading, measured against reference libraries
(Nito.AsyncEx, NeoSmart, ProtoPromise, Microsoft.VisualStudio.Threading) and against the
synchronous BCL primitives they replace (lock/Monitor,
SpinLock, Interlocked, ReaderWriterLockSlim,
Barrier, CountdownEvent), across platforms, target frameworks and
contention levels.
Select a platform, primitive family and operation; each implementation is drawn as its own
series. Where a benchmark varies by CancellationToken state, the Cancellation
selector chooses the state to plot: a live but unfired token carries measurable overhead
relative to CancellationToken.None. The page runs entirely in the browser, with no
server and no external database.
Click a color, line style or point shape to hide or show that series.
Data source: benchmark-history.sqlite, generated at build time by
scripts/threading-benchmark-trends/import_run_archive.py from the run archive on
the benchmarks branch.
Table (one run) reproduces a single run's report: every dimension that run carried as its own column, grouped and ordered as BenchmarkDotNet ordered it. Rows for this library's own implementations are shaded, and the row the benchmark class declares as its baseline more deeply. Ratio is the figure the report recorded, relative to that declared baseline; BenchmarkDotNet fixes one baseline per benchmark class, so for some families the reference row falls outside the current selection. Any recorded run can be shown, and a second one compared against it β two dates on one machine, or one commit on two machines, which the run list marks as (same commit).
Hovering a point gives the commit, the value, the .NET runtime it was measured on, and the version of the reference library where one applies. Trend over time plots one point per recorded run, for every recorded parameter combination under the current filters; the line-style legend hides individual combinations, and Cancellation, Metric and Date range apply here. Scaling by contention plots the benchmark's parameterized axis β queued waiters for most classes, distinct keys or threads for the keyed locks β for a single run, the newest by default and any recorded one through the Run picker. It draws every cancellation state and both metrics together: color identifies the implementation, line style the cancellation state, mean time is read from the left axis and allocation from the right. All three legends toggle. Methods with no parameterized axis show a single point per implementation.