Benchmarks running every hour
.NET Mapper Benchmarks
Real-time performance comparison of popular .NET object mapping libraries.
Automated benchmarks with averaged results from the full history of the last 3 months.
Last updated: May 14, 2026, 01:04 PM
Benchmark Results
Average of last 3 months · Mean execution time in microseconds (μs) · Lower is better
SimpleFlat Flat object with primitive properties
NestedObject Object containing nested child objects
Collection Object with a collection of 100 items
NameDifference Source and target have different property names
Mean Execution Time Microseconds (μs) per operation · lower is better · average of last 3 months
Library Version SimpleFlat (μs) NestedObject (μs) Collection (μs) NameDifference (μs) Manual (foreach) .NET 10.0.7 0.02 μs
0.04 μs
2.06 μs
0.01 μs
Manual (LINQ) .NET 10.0.7 0.02 μs
0.04 μs
2.21 μs
0.01 μs
AutoMapper 16.1.1 0.07 μs
0.17 μs
2.7 μs
0.07 μs
Mapster 10.0.8-pre06 0.03 μs
0.06 μs
2.24 μs
0.03 μs
TinyMapper 3.0.2-beta 0.03 μs
0.05 μs
2.89 μs
0.02 μs
AgileMapper 1.8.1 0.47 μs
0.5 μs
2.9 μs
0.46 μs
Mapperly 5.0.0-next.7 0.02 μs
0.04 μs
2.27 μs
0.01 μs
Memory Allocation Bytes allocated per operation
Library Version SimpleFlat NestedObject Collection NameDifference Manual (foreach) .NET 10.0.7 88 B
216 B
9,656 B
56 B
Manual (LINQ) .NET 10.0.7 88 B
216 B
9,728 B
56 B
AutoMapper 16.1.1 88 B
216 B
10,992 B
56 B
Mapster 10.0.8-pre06 88 B
216 B
9,656 B
56 B
TinyMapper 3.0.2-beta 88 B
112 B
9,656 B
56 B
AgileMapper 1.8.1 352 B
376 B
9,920 B
320 B
Mapperly 5.0.0-next.7 88 B
216 B
9,656 B
56 B
{"run_at":"2026-05-14T13:04:53.7110038+02:00","libraries":[{"name":"Manual (foreach)","version":".NET 10.0.7","cases":[{"name":"SimpleFlat","mean_us":0.02,"median_us":0.02,"p95_us":0.02,"p99_us":0.02,"stddev_us":0,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.04,"median_us":0.04,"p95_us":0.05,"p99_us":0.05,"stddev_us":0,"alloc_bytes":216},{"name":"Collection","mean_us":2.06,"median_us":2.06,"p95_us":2.11,"p99_us":2.11,"stddev_us":0.04,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.01,"median_us":0.01,"p95_us":0.01,"p99_us":0.01,"stddev_us":0,"alloc_bytes":56}]},{"name":"Manual (LINQ)","version":".NET 10.0.7","cases":[{"name":"SimpleFlat","mean_us":0.02,"median_us":0.02,"p95_us":0.02,"p99_us":0.02,"stddev_us":0,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.04,"median_us":0.04,"p95_us":0.05,"p99_us":0.05,"stddev_us":0,"alloc_bytes":216},{"name":"Collection","mean_us":2.21,"median_us":2.21,"p95_us":2.26,"p99_us":2.26,"stddev_us":0.04,"alloc_bytes":9728},{"name":"NameDifference","mean_us":0.01,"median_us":0.01,"p95_us":0.01,"p99_us":0.01,"stddev_us":0,"alloc_bytes":56}]},{"name":"AutoMapper","version":"16.1.1","cases":[{"name":"SimpleFlat","mean_us":0.07,"median_us":0.07,"p95_us":0.08,"p99_us":0.08,"stddev_us":0,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.17,"median_us":0.17,"p95_us":0.17,"p99_us":0.17,"stddev_us":0,"alloc_bytes":216},{"name":"Collection","mean_us":2.7,"median_us":2.7,"p95_us":2.76,"p99_us":2.77,"stddev_us":0.05,"alloc_bytes":10992},{"name":"NameDifference","mean_us":0.07,"median_us":0.07,"p95_us":0.07,"p99_us":0.07,"stddev_us":0,"alloc_bytes":56}]},{"name":"Mapster","version":"10.0.8-pre06","cases":[{"name":"SimpleFlat","mean_us":0.03,"median_us":0.03,"p95_us":0.03,"p99_us":0.03,"stddev_us":0,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.06,"median_us":0.06,"p95_us":0.06,"p99_us":0.06,"stddev_us":0,"alloc_bytes":216},{"name":"Collection","mean_us":2.24,"median_us":2.24,"p95_us":2.28,"p99_us":2.29,"stddev_us":0.04,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.03,"median_us":0.03,"p95_us":0.03,"p99_us":0.03,"stddev_us":0,"alloc_bytes":56}]},{"name":"TinyMapper","version":"3.0.2-beta","cases":[{"name":"SimpleFlat","mean_us":0.03,"median_us":0.03,"p95_us":0.03,"p99_us":0.03,"stddev_us":0,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.05,"median_us":0.05,"p95_us":0.05,"p99_us":0.05,"stddev_us":0,"alloc_bytes":112},{"name":"Collection","mean_us":2.89,"median_us":2.88,"p95_us":2.94,"p99_us":2.95,"stddev_us":0.05,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.02,"median_us":0.02,"p95_us":0.02,"p99_us":0.02,"stddev_us":0,"alloc_bytes":56}]},{"name":"AgileMapper","version":"1.8.1","cases":[{"name":"SimpleFlat","mean_us":0.47,"median_us":0.47,"p95_us":0.48,"p99_us":0.48,"stddev_us":0.01,"alloc_bytes":352},{"name":"NestedObject","mean_us":0.5,"median_us":0.5,"p95_us":0.5,"p99_us":0.5,"stddev_us":0,"alloc_bytes":376},{"name":"Collection","mean_us":2.9,"median_us":2.89,"p95_us":2.95,"p99_us":2.96,"stddev_us":0.05,"alloc_bytes":9920},{"name":"NameDifference","mean_us":0.46,"median_us":0.46,"p95_us":0.47,"p99_us":0.47,"stddev_us":0,"alloc_bytes":320}]},{"name":"Mapperly","version":"5.0.0-next.7","cases":[{"name":"SimpleFlat","mean_us":0.02,"median_us":0.02,"p95_us":0.02,"p99_us":0.02,"stddev_us":0,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.04,"median_us":0.04,"p95_us":0.05,"p99_us":0.05,"stddev_us":0,"alloc_bytes":216},{"name":"Collection","mean_us":2.27,"median_us":2.26,"p95_us":2.31,"p99_us":2.32,"stddev_us":0.05,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.01,"median_us":0.01,"p95_us":0.01,"p99_us":0.01,"stddev_us":0,"alloc_bytes":56}]}]}
How It Works
A transparent and reproducible benchmarking pipeline for .NET object mappers
⏱
Automated Execution BenchmarkDotNet benchmarks run automatically every hour on a dedicated VPS.
📊
Averaged Results Results shown are the average of the full history of the last 3 months, reducing noise and outliers.
🔄
Auto-Updated Libraries Library versions are updated automatically so benchmarks always reflect the latest releases.
🎯
Multiple Scenarios Each library is tested across flat mapping, nested objects, collections, and name differences.