Skip to content

Add reproducible BenchmarkDotNet suite#353

Merged
thomhurst merged 2 commits into
mainfrom
issue-339-benchmark-suite
Jul 21, 2026
Merged

Add reproducible BenchmarkDotNet suite#353
thomhurst merged 2 commits into
mainfrom
issue-339-benchmark-suite

Conversation

@thomhurst

Copy link
Copy Markdown
Owner

Summary

  • add a BenchmarkDotNet 0.15.8 project with seven processor scenarios
  • measure completed-task and Task.Yield selectors at 1k, 10k, and 100k items with memory diagnostics
  • document full runs, filtering, and cross-revision artifact comparison
  • keep the benchmark executable out of release package discovery

Validation

  • full Release solution build succeeds
  • 1,611 tests pass across net8.0, net9.0, and net10.0
  • BenchmarkSwitcher discovers all seven scenarios
  • Dry-job smoke executes all unbounded combinations across both workloads and all sizes

Closes #339

@thomhurst
thomhurst force-pushed the issue-339-benchmark-suite branch from 6628587 to 08eb507 Compare July 21, 2026 18:50
@greptile-apps

greptile-apps Bot commented Jul 21, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds a reproducible BenchmarkDotNet suite for the async processor. The main changes are:

  • Seven processor scenarios across two workloads and three input sizes.
  • Benchmark run, filtering, and revision-comparison guidance.
  • Solution and pipeline integration for benchmark builds.
  • Benchmark exclusion from release package discovery.

Confidence Score: 5/5

This looks safe to merge.

  • The pipeline now builds the benchmark project before packaging.
  • Benchmark build failures stop the workflow.
  • No blocking issues remain in the updated code.

Important Files Changed

Filename Overview
EnumerableAsyncProcessor.Pipeline/Modules/BuildBenchmarkProjectsModule.cs Adds explicit Release builds for benchmark projects and propagates build failures.
EnumerableAsyncProcessor.Pipeline/Modules/PackProjectsModule.cs Makes packaging depend on the benchmark build while excluding benchmarks from package discovery.
EnumerableAsyncProcessor.Pipeline/Program.cs Registers benchmark validation for pipeline runs.
TomLonghurst.EnumerableAsyncProcessor.sln Adds the benchmark project to Debug and Release solution builds.
benchmarks/EnumerableAsyncProcessor.Benchmarks.csproj Defines a non-packable .NET 10 BenchmarkDotNet executable.
benchmarks/ProcessorBenchmarks.cs Defines the benchmark scenarios, workloads, input sizes, and memory diagnostics.

Reviews (2): Last reviewed commit: "ci: build benchmarks in pipeline (#353)" | Re-trigger Greptile

Comment thread benchmarks/EnumerableAsyncProcessor.Benchmarks.csproj
Add BenchmarkDotNet coverage for seven processor paths across completed and yielding selectors at 1k, 10k, and 100k items. Document filtering and revision comparisons, and exclude the non-packable benchmark project from release packaging.
@thomhurst
thomhurst force-pushed the issue-339-benchmark-suite branch from 08eb507 to 3d4521c Compare July 21, 2026 19:42
@thomhurst
thomhurst merged commit 928aff6 into main Jul 21, 2026
7 checks passed
@thomhurst
thomhurst deleted the issue-339-benchmark-suite branch July 21, 2026 19:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a BenchmarkDotNet project to lock in and track performance

1 participant