Skip to content

Performance

Foundatio.Mediator aims to get as close to direct method call performance as possible while providing a full-featured mediator with excellent developer ergonomics. Through C# interceptors and source generators, we eliminate runtime reflection entirely.

Benchmark Results

📊 Last Updated: 2026-01-09

Commands

Fire-and-forget dispatch with no return value.

MethodMeanAllocated
Direct_Command0.0018 ns0 B
Foundatio_Command7.7535 ns0 B
MediatorNet_Command8.7615 ns0 B
ImmediateHandlers_Command11.5821 ns0 B
MediatR_Command34.8951 ns128 B
Wolverine_Command191.5925 ns704 B
MassTransit_Command1,894.2028 ns4,912 B

Queries

Request/response dispatch returning an Order object.

MethodMeanAllocated
Direct_Query21.4985 ns48 B
MediatorNet_Query25.9325 ns48 B
Foundatio_Query29.4850 ns48 B
ImmediateHandlers_Query31.3242 ns48 B
MediatR_Query54.1867 ns248 B
MediatR_QueryWithDependencies134.4035 ns600 B
Wolverine_Query270.7645 ns864 B
MassTransit_Query6,860.7615 ns13,144 B

Events (Publish)

Notification dispatched to 2 handlers.

MethodMeanAllocated
Direct_Publish0.0046 ns0 B
MediatorNet_Publish6.2083 ns0 B
Foundatio_Publish29.6835 ns0 B
ImmediateHandlers_Publish54.4492 ns32 B
MediatR_Publish56.4874 ns440 B
Wolverine_Publish1,858.9299 ns2,840 B
MassTransit_Publish3,019.7545 ns7,456 B

Full Query (Dependencies + Middleware)

Query where handler has an injected service (IOrderService) and timing middleware (Before/Finally or IPipelineBehavior).

MethodMeanAllocated
Direct_FullQuery64.3040 ns160 B
MediatorNet_FullQuery76.7475 ns88 B
ImmediateHandlers_FullQuery76.9550 ns88 B
Foundatio_FullQuery125.0594 ns288 B
Wolverine_FullQuery310.9703 ns944 B
MassTransit_FullQuery6,984.8064 ns13,144 B

Cascading Messages

CreateOrder returns an Order and publishes OrderCreatedEvent to 2 handlers. Foundatio uses tuple returns for automatic cascading; other libraries publish manually.

MethodMeanAllocated
Direct_CascadingMessages27.9258 ns144 B
MediatorNet_CascadingMessages37.5463 ns72 B
Foundatio_CascadingMessages76.1077 ns72 B
ImmediateHandlers_CascadingMessages84.0305 ns104 B
MediatR_CascadingMessages117.5655 ns744 B
Wolverine_CascadingMessages2,283.9439 ns4,056 B
MassTransit_CascadingMessages9,479.0192 ns20,848 B

Short-Circuit Middleware

Middleware returns cached result; handler is never invoked. Each library uses its idiomatic short-circuit approach (IPipelineBehavior, HandlerResult.ShortCircuit, HandlerContinuation.Stop, etc.).

MethodMeanAllocated
Direct_ShortCircuit0.2548 ns0 B
MediatorNet_ShortCircuit8.5877 ns0 B
ImmediateHandlers_ShortCircuit9.6720 ns0 B
Foundatio_ShortCircuit9.7259 ns0 B
MediatR_ShortCircuit51.7768 ns416 B
Wolverine_ShortCircuit230.5081 ns824 B
MassTransit_ShortCircuit6,363.0741 ns12,224 B

Running Benchmarks Locally

bash
cd benchmarks/Foundatio.Mediator.Benchmarks
dotnet run -c Release

Released under the MIT License.