aspnet-minimal
Flagship · C# · engine: kestrel · standard configuration · completeness 4/4
Minimal ASP.NET Core server using .NET 10 with Kestrel and minimal API routing.
Achievements
🥈 3 Silver · 🥉 3 Bronze. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥈 Silver | Family composite | Composite · gRPC | 2 of 4 |
| 🥈 Silver | Test profile | gRPC · Unary | 2 of 4 |
| 🥈 Silver | Test profile | gRPC · Unary TLS | 2 of 4 |
| 🥉 Bronze | Within its language | C# · HTTP/2 | 3 of 5 |
| 🥉 Bronze | Test profile | Efficiency · Latency-10K | 3 of 72 |
| 🥉 Bronze | Test profile | HTTP/3 · Baseline | 3 of 11 |
Composite rank
Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 28 of 72 | 3164 |
| HTTP/2 | 8 of 20 | 925 |
| HTTP/3 | 8 of 11 | 376 |
| gRPC | 2 of 4 | 1166 |
| WebSocket | 11 of 20 | 890 |
Every result
Alpha Round, 35 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 1,305,946 | 2.67ms | 8.19ms | 5599.7% | 408MiB |
| Connection | Pipelined | 4,096 | 6,821,003 | 7.85ms | 20.30ms | 5559.6% | 341MiB |
| Connection | Short-lived | 4,096 | 456,366 | 1.52ms | 12.40ms | 3439.3% | 141MiB |
| Concurrency | Async Delay | 32,000 | 871,904 | 27.15ms | 56.90ms | 4652.9% | 1.7GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 103.0us | 129.0us | 145.9% | 164MiB |
| Efficiency | Latency-1M | 1,024 | 997,932 | 480.9us | 4474.0us | 4974.2% | 197MiB |
| Efficiency | Latency-500K/8 | 1,024 | 299,094 | 3956788.2us | 7874560.0us | 742.2% | 158MiB |
| Workload | JSON Comp | 4,096 | 337,518 | 10.01ms | 34.40ms | 5871.1% | 554MiB |
| Workload | JSON Comp | 16,384 | 325,717 | 14.57ms | 38.20ms | 5714.2% | 644MiB |
| Workload | JSON TLS | 4,096 | 501,185 | 7.96ms | 96.85ms | 6002.4% | 782MiB |
| Workload | 8Gbit | 512 | 49,306 | 190.1us | 1736.0us | 899.7% | 219MiB |
| Workload | Static TLS | 1,024 | 93,261 | 11.06ms | 49.84ms | 6027.9% | 498MiB |
| Database | Async DB | 1,024 | 165,654 | 5.64ms | 19.20ms | 3637.1% | 415MiB |
| Database | Fortunes | 1,024 | 77,921 | 10.77ms | 33.20ms | 5329.1% | 491MiB |
| HTTP/2 | Baseline | 256 | 2,220,505 | 11.22ms | 82.75ms | 6117.8% | 920MiB |
| HTTP/2 | Baseline | 1,024 | 1,956,244 | 55.16ms | 253.50ms | 5401.9% | 3.1GiB |
| HTTP/2 | Static | 256 | 73,392 | 109.48ms | 896.12ms | 6001.4% | 3.2GiB |
| HTTP/2 | Static | 1,024 | 54,245 | 529.37ms | 4.34s | 5802.7% | 9.2GiB |
| HTTP/2 | Baseline (h2c) | 256 | 2,732,413 | 9.37ms | 54.79ms | 6281.1% | 1.4GiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 2,535,974 | 40.89ms | 246.27ms | 5993.1% | 3.1GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 1,769,573 | 204.59ms | 798.67ms | 5581.1% | 8.4GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 713,236 | 45.91ms | 209.59ms | 6100.1% | 1.9GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 581,550 | 183.36ms | 1.12s | 5761.9% | 4.9GiB |
| HTTP/3 | Baseline | 64 | 649,852 | 6.16ms | 23.91ms | 6061.6% | 1.2GiB |
| HTTP/3 | Static | 64 | 54,100 | 75.11ms | 329.85ms | 4761.2% | 2.8GiB |
| gRPC | Unary | 256 | 2,491,232 | 10.56ms | 10.56ms | 5624.0% | 1007.0MiB |
| gRPC | Unary | 1,024 | 2,338,525 | 41.35ms | 41.35ms | 6207.7% | 2.5GiB |
| gRPC | Unary TLS | 256 | 2,058,161 | 12.19ms | 12.19ms | 6079.8% | 818.2MiB |
| gRPC | Unary TLS | 1,024 | 1,826,316 | 56.98ms | 56.98ms | 5281.5% | 2.8GiB |
| WebSocket | Echo | 512 | 1,835,273 | 278us | 696us | 6128.2% | 220.4MiB |
| WebSocket | Echo | 4,096 | 1,806,996 | 1.72ms | 5.25ms | 6120.1% | 389.2MiB |
| WebSocket | Echo | 16,384 | 1,686,022 | 3.63ms | 10.10ms | 6033.9% | 456.1MiB |
| WebSocket | Echo Pipelined | 512 | 19,748,819 | 414us | 2.08ms | 5700.1% | 225MiB |
| WebSocket | Echo Pipelined | 4,096 | 19,744,758 | 1.92ms | 7.12ms | 5656.8% | 380MiB |
| WebSocket | Echo Pipelined | 16,384 | 19,407,960 | 2.94ms | 9.60ms | 5864.6% | 380MiB |
Compared with
The C# entries around aspnet-minimal on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs aspnet-minimal | |
|---|---|---|---|
| genhttp-ioxide | 7006 | +121% | head to head |
| carter | 3454 | +9% | head to head |
| aspnet-minimal-11 | 3205 | +1% | head to head |
| fastendpoints | 3059 | -3% | head to head |
| effinitive | 2868 | -9% | head to head |
Compare aspnet-minimal with any C# entry · Compare aspnet-minimal with any entry, in any language · Every C# entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry