diff --git a/bench/BenchmarkDotNet.Artifacts/results/Polly.Core.Benchmarks.CompositeComponentBenchmark-report-github.md b/bench/BenchmarkDotNet.Artifacts/results/Polly.Core.Benchmarks.CompositeComponentBenchmark-report-github.md new file mode 100644 index 00000000000..cfb46f674aa --- /dev/null +++ b/bench/BenchmarkDotNet.Artifacts/results/Polly.Core.Benchmarks.CompositeComponentBenchmark-report-github.md @@ -0,0 +1,14 @@ +``` + +BenchmarkDotNet v0.13.9+228a464e8be6c580ad9408e98f18813f6407fb5a, Windows 11 (10.0.22621.2428/22H2/2022Update/SunValley2) +12th Gen Intel Core i7-1270P, 1 CPU, 16 logical and 12 physical cores +.NET SDK 7.0.403 + [Host] : .NET 7.0.13 (7.0.1323.51816), X64 RyuJIT AVX2 + +Job=MediumRun Toolchain=InProcessEmitToolchain IterationCount=15 +LaunchCount=2 WarmupCount=10 + +``` +| Method | Mean | Error | StdDev | Allocated | +|------------------------------- |---------:|---------:|---------:|----------:| +| CompositeComponent_ExecuteCore | 44.37 ns | 1.994 ns | 2.923 ns | - | diff --git a/bench/Polly.Core.Benchmarks/CompositeComponentBenchmark.cs b/bench/Polly.Core.Benchmarks/CompositeComponentBenchmark.cs new file mode 100644 index 00000000000..453862cfc17 --- /dev/null +++ b/bench/Polly.Core.Benchmarks/CompositeComponentBenchmark.cs @@ -0,0 +1,27 @@ +using Polly.Telemetry; +using Polly.Utils.Pipeline; + +namespace Polly.Core.Benchmarks; + +public class CompositeComponentBenchmark +{ + private ResilienceContext? _context; + private PipelineComponent? _component; + + [GlobalSetup] + public void Setup() + { + var first = PipelineComponent.Empty; + var second = PipelineComponent.Empty; + var source = new ResilienceTelemetrySource("pipeline", "instance", "strategy"); + var telemetry = new ResilienceStrategyTelemetry(source, null); + var components = new[] { first, second }; + + _component = CompositeComponent.Create(components, telemetry, TimeProvider.System); + _context = ResilienceContextPool.Shared.Get(); + } + + [Benchmark] + public ValueTask> CompositeComponent_ExecuteCore() + => _component!.ExecuteCore((_, state) => Outcome.FromResultAsValueTask(state), _context!, 42); +}