Skip to content

Performance comparisons

Benchmark results comparing Immediate.Handlers against MediatR and other mediator implementations.

4 min read

All performance benchmarks reported use the following environment:

// * Summary *

BenchmarkDotNet v0.16.0-nightly.20260608.560, Windows 11 (10.0.26200.8655/25H2/2025Update/HudsonValley2)
12th Gen Intel Core i7-12700H 2.30GHz, 1 CPU, 20 logical and 14 physical cores
Memory: 31.69 GB Total, 21.22 GB Available
.NET SDK 11.0.100-preview.5.26302.115
  [Host]     : .NET 11.0.0 (11.0.0-preview.5.26302.115, 11.0.26.30315), X64 RyuJIT x86-64-v3
  Job-GVKUBM : .NET 10.0.9 (10.0.9, 10.0.926.27113), X64 RyuJIT x86-64-v3
  Job-IHFIKV : .NET 11.0.0 (11.0.0-preview.5.26302.115, 11.0.26.30315), X64 RyuJIT x86-64-v3
  Job-AZESIF : .NET 8.0.28 (8.0.28, 8.0.2826.26413), X64 RyuJIT x86-64-v3

InvokeAsync (aka Command)

This benchmark tests the various mediator implementations with a single command (no/Unit return value).

ImplementationScenarioRuntimeMeanErrorGen0Gen1Allocated
DirectInvokeAsync.NET 11.00.9767 ns0.0065 ns---
Immediate.HandlersInvokeAsync.NET 11.02.3605 ns0.0022 ns---
MediatorNetInvokeAsync.NET 11.012.5804 ns0.0454 ns---
Foundatio.MediatorInvokeAsync.NET 11.014.0770 ns0.0608 ns0.0019-24 B
DispatchRInvokeAsync.NET 11.020.6877 ns0.0292 ns---
AxentInvokeAsync.NET 11.044.2312 ns0.1712 ns0.0063-80 B
MediatRInvokeAsync.NET 11.049.6130 ns0.2401 ns0.0102-128 B

InvokeAsyncT (aka Query)

This benchmark tests the various mediator implementations with a simple query with value response.

ImplementationScenarioRuntimeMeanErrorGen0Gen1Allocated
DirectInvokeAsyncT.NET 11.022.8746 ns0.0713 ns0.0038-48 B
Immediate.HandlersInvokeAsyncT.NET 11.024.1921 ns0.0680 ns0.0038-48 B
MediatorNetInvokeAsyncT.NET 11.037.3381 ns0.0689 ns0.0038-48 B
Foundatio.MediatorInvokeAsyncT.NET 11.040.9700 ns0.0764 ns0.0057-72 B
DispatchRInvokeAsyncT.NET 11.047.7985 ns0.1209 ns0.0038-48 B
AxentInvokeAsyncT.NET 11.063.1785 ns0.1873 ns0.0082-104 B
MediatRInvokeAsyncT.NET 11.074.2955 ns0.9705 ns0.0197-248 B

InvokeAsyncTWithDI (aka FullQuery)

This benchmark tests the various mediator implementations with a query that includes a DI parameter and a behavior.

ImplementationScenarioRuntimeMeanErrorGen0Gen1Allocated
DirectInvokeAsyncTWithDI.NET 11.032.8809 ns0.0889 ns0.0032-40 B
Immediate.HandlersInvokeAsyncTWithDI.NET 11.048.4441 ns0.1384 ns0.0032-40 B
Foundatio.MediatorInvokeAsyncTWithDI.NET 11.059.6983 ns0.1802 ns0.0051-64 B
MediatorNetInvokeAsyncTWithDI.NET 11.061.1463 ns0.1275 ns0.0031-40 B
DispatchRInvokeAsyncTWithDI.NET 11.073.2588 ns0.2354 ns0.0031-40 B
AxentInvokeAsyncTWithDI.NET 11.084.3546 ns0.3107 ns0.0076-96 B
MediatRInvokeAsyncTWithDI.NET 11.0143.0193 ns0.8873 ns0.0439-552 B

Code and Full Results