← NetWasm

NetWasm micro-benchmarks

dotnet/performance runtime, System.Numerics vector, System.Runtime.Intrinsics and System.Memory micro-benchmarks on NetWasm, Mono AOT and desktop .NET 11. Each comparison reads as NetWasm against the other: 2.00× faster means NetWasm takes half the time, 2.00× slower twice the time, so equal gaps look equal either way. The small figure beside it is the raw ratio, NetWasm's time over the other's; the view switch shows that ratio or its inverse instead.

By family

FamilyCasesNetWasm vs Mono AOTNetWasm vs desktop JIT

How it ran

Method: 2,213 cases every runtime lists: dotnet/performance's runtime micro-benchmarks with its System.Numerics, System.Runtime.Intrinsics and System.Memory benchmarks, and five NetWasm workloads: a trial-division search for the largest prime below 10,000,000, with a remainder test and with one division a step, and the timed regions of the full transaction, retained object graph and UI churn allocation workloads, called repeatedly in one process. The three runtimes ran interleaved on 5 November 2026: the cases went in chunks of 50, each chunk ran on every runtime one after another, the order rotating from chunk to chunk and round to round, and each runtime kept its fastest of two rounds (1 h 49 min, load average 2.1 at the start and 2.2 at the end). DoomSharp's render benchmark is timed on its own, since it loads a WAD.
NetWasm: 0.10.8 from NuGet.org, O3, NetWasmGC, Wasmtime 49.0.3, precompiled.
Mono AOT: .NET 11 RC3 wasi-experimental, Wasm SIMD, same Wasmtime, precompiled.
Desktop: .NET 11 RC3 JIT with tiering off (optimized code from the start).
Host: Apple M1 Max, macOS 26.6.2. Every runtime timed all 2,213 cases; the NetWasm / Mono AOT geometric means leave out the five † cases.
† Mono AOT: In five cases Mono AOT's LLVM backend deleted the measured work, because the benchmark never uses its results: NewtE, Simpsn and Trap compute their values and then return true, and the two NewDelegateClassEmpty cases create a delegate in a loop and discard it. Mono AOT's 10 to 19 ns is the empty call, while desktop .NET and NetWasm run the loops, so these ratios do not compare the same work. They are marked † and left out of the NetWasm / Mono AOT means, which would otherwise be 0.427 overall instead of 0.414.

Every case