Benchmarks running every 5 minutes
.NET Mapper
Benchmarks
Real-time performance comparison of popular .NET object mapping libraries.
Automated benchmarks with averaged results from the last 50 runs.
Last updated:
Benchmark Results
Average of last 50 runs · 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 50 runs
| Library | Version | SimpleFlat (μs) | NestedObject (μs) | Collection (μs) | NameDifference (μs) |
| AutoMapper | 16.1.1 | 0.18 μs
| 0.26 μs
| 7.87 μs
| 0.1 μs
|
| Mapperly | 5.0.0-next.3 | 0.09 μs
| 0.11 μs
| 5.81 μs
| 0.02 μs
|
| Mapster | 10.0.7-pre01 | 0.04 μs
| 0.26 μs
| 6.02 μs
| 0.03 μs
|
| TinyMapper | 3.0.2-beta | 0.05 μs
| 0.07 μs
| 8.9 μs
| 0.03 μs
|
| AgileMapper | 1.8.1 | 0.73 μs
| 0.8 μs
| 11.84 μs
| 0.87 μs
|
| Manual (LINQ) | .NET 10.0.4 | 0.04 μs
| 0.1 μs
| 13.46 μs
| 0.01 μs
|
| Manual (foreach) | .NET 10.0.4 | 0.04 μs
| 0.16 μs
| 13.55 μs
| 0.02 μs
|
Memory Allocation
Bytes allocated per operation
| Library | Version | SimpleFlat | NestedObject | Collection | NameDifference |
| AutoMapper | 16.1.1 | 88 B
| 216 B
| 10,992 B
| 56 B
|
| Mapperly | 5.0.0-next.3 | 88 B
| 176 B
| 9,656 B
| 56 B
|
| Mapster | 10.0.7-pre01 | 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
|
| Manual (LINQ) | .NET 10.0.4 | 88 B
| 216 B
| 9,728 B
| 56 B
|
| Manual (foreach) | .NET 10.0.4 | 88 B
| 216 B
| 9,656 B
| 56 B
|
{"run_at":"2026-03-30T10:02:12.6363521+02:00","libraries":[{"name":"AutoMapper","version":"16.1.1","cases":[{"name":"SimpleFlat","mean_us":0.18,"median_us":0.1,"p95_us":0.12,"p99_us":0.74,"stddev_us":0.86,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.26,"median_us":0.19,"p95_us":0.23,"p99_us":1.71,"stddev_us":0.44,"alloc_bytes":216},{"name":"Collection","mean_us":7.87,"median_us":5.35,"p95_us":17.85,"p99_us":45.67,"stddev_us":10.61,"alloc_bytes":10992},{"name":"NameDifference","mean_us":0.1,"median_us":0.08,"p95_us":0.11,"p99_us":0.14,"stddev_us":0.13,"alloc_bytes":56}]},{"name":"Mapperly","version":"5.0.0-next.3","cases":[{"name":"SimpleFlat","mean_us":0.09,"median_us":0,"p95_us":0.01,"p99_us":0.85,"stddev_us":0.83,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.11,"median_us":0,"p95_us":0.01,"p99_us":1.7,"stddev_us":0.91,"alloc_bytes":176},{"name":"Collection","mean_us":5.81,"median_us":4.11,"p95_us":9.38,"p99_us":38.58,"stddev_us":7.78,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.02,"median_us":0,"p95_us":0,"p99_us":0.01,"stddev_us":0.19,"alloc_bytes":56}]},{"name":"Mapster","version":"10.0.7-pre01","cases":[{"name":"SimpleFlat","mean_us":0.04,"median_us":0.01,"p95_us":0.01,"p99_us":0.93,"stddev_us":0.26,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.26,"median_us":0.02,"p95_us":0.06,"p99_us":2.04,"stddev_us":2.07,"alloc_bytes":216},{"name":"Collection","mean_us":6.02,"median_us":4.06,"p95_us":10.81,"p99_us":41.41,"stddev_us":8.61,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.03,"median_us":0,"p95_us":0.01,"p99_us":0.02,"stddev_us":0.29,"alloc_bytes":56}]},{"name":"TinyMapper","version":"3.0.2-beta","cases":[{"name":"SimpleFlat","mean_us":0.05,"median_us":0.01,"p95_us":0.03,"p99_us":0.89,"stddev_us":0.31,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.07,"median_us":0.02,"p95_us":0.07,"p99_us":1.72,"stddev_us":0.38,"alloc_bytes":112},{"name":"Collection","mean_us":8.9,"median_us":7,"p95_us":13.75,"p99_us":34.81,"stddev_us":8.42,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.03,"median_us":0,"p95_us":0.01,"p99_us":0.16,"stddev_us":0.23,"alloc_bytes":56}]},{"name":"AgileMapper","version":"1.8.1","cases":[{"name":"SimpleFlat","mean_us":0.73,"median_us":0.55,"p95_us":0.73,"p99_us":4.29,"stddev_us":1.03,"alloc_bytes":352},{"name":"NestedObject","mean_us":0.8,"median_us":0.59,"p95_us":0.87,"p99_us":4.89,"stddev_us":1.12,"alloc_bytes":376},{"name":"Collection","mean_us":11.84,"median_us":5.89,"p95_us":12.33,"p99_us":37.67,"stddev_us":48.54,"alloc_bytes":9920},{"name":"NameDifference","mean_us":0.87,"median_us":0.69,"p95_us":0.88,"p99_us":4.57,"stddev_us":1.08,"alloc_bytes":320}]},{"name":"Manual (LINQ)","version":".NET 10.0.4","cases":[{"name":"SimpleFlat","mean_us":0.04,"median_us":0,"p95_us":0,"p99_us":0.88,"stddev_us":0.29,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.1,"median_us":0.01,"p95_us":0.02,"p99_us":2.68,"stddev_us":0.55,"alloc_bytes":216},{"name":"Collection","mean_us":13.46,"median_us":4.85,"p95_us":10.39,"p99_us":39.75,"stddev_us":75.17,"alloc_bytes":9728},{"name":"NameDifference","mean_us":0.01,"median_us":0,"p95_us":0,"p99_us":0.01,"stddev_us":0.12,"alloc_bytes":56}]},{"name":"Manual (foreach)","version":".NET 10.0.4","cases":[{"name":"SimpleFlat","mean_us":0.04,"median_us":0,"p95_us":0,"p99_us":1.1,"stddev_us":0.32,"alloc_bytes":88},{"name":"NestedObject","mean_us":0.16,"median_us":0.01,"p95_us":0.03,"p99_us":2.53,"stddev_us":1.19,"alloc_bytes":216},{"name":"Collection","mean_us":13.55,"median_us":4.98,"p95_us":11.04,"p99_us":30.39,"stddev_us":74.73,"alloc_bytes":9656},{"name":"NameDifference","mean_us":0.02,"median_us":0,"p95_us":0,"p99_us":0.13,"stddev_us":0.21,"alloc_bytes":56}]}]}
How It Works
A transparent and reproducible benchmarking pipeline for .NET object mappers
⏱
Automated Execution
Benchmarks run automatically every 5 minutes on a dedicated VPS.
📊
Averaged Results
Results shown are the average of the last 50 runs, 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.