Un benchmark de rendimiento puro, crudo y directo diseñado para medir el costo real de CPU y Memoria al mapear objetos en .NET 10.
El objetivo de este repositorio es demostrar con datos empíricos por qué el uso de herramientas basadas en reflexión (como AutoMapper) es un lastre de rendimiento en aplicaciones modernas, frente a alternativas que utilizan Source Generators (como Mapperly).
Las pruebas fueron ejecutadas con BenchmarkDotNet v0.15.8 en un entorno .NET 10.0. Los números no mienten: AutoMapper es casi 4 veces más lento que el mapeo manual, mientras que Mapperly supera en velocidad al propio código escrito a mano gracias a la optimización del compilador (Inlining).
| Method | Mean | Error | StdDev | Min | Max | Op/s | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|
| MapeoManual | 8.919 ns | 0.1192 ns | 0.1115 ns | 8.814 ns | 9.273 ns | 112,120,884.9 | 1.00 | 0.02 | 0.0089 | 56 B | 1.00 |
| AutoMapper | 35.193 ns | 0.6264 ns | 1.2796 ns | 33.411 ns | 41.649 ns | 28,414,872.0 | 3.95 | 0.15 | 0.0089 | 56 B | 1.00 |
| Mapster | 16.519 ns | 0.2493 ns | 0.2332 ns | 16.168 ns | 16.894 ns | 60,537,109.6 | 1.85 | 0.03 | 0.0089 | 56 B | 1.00 |
| Mapperly | 7.394 ns | 0.0698 ns | 0.0653 ns | 7.274 ns | 7.528 ns | 135,242,581.9 | 0.83 | 0.01 | 0.0089 | 56 B | 1.00 |
Nota: Todos los mappers asignan la misma cantidad de memoria (56 Bytes) para crear la instancia del DTO. El cuello de botella real está en el tiempo de CPU (nanosegundos).
Si no crees en estos números, clona el repositorio y córrelo en tu propia máquina.
Regla de oro: Jamás ejecutes esto desde Visual Studio en modo Debug. Arruinarás las métricas.
- Abre tu terminal.
- Navega a la raíz del proyecto.
- Ejecuta el benchmark en modo Release:
dotnet run -c Release- C# 14 / .NET 10.0
- BenchmarkDotNet v0.15.8
- Riok.Mapperly v4.3.1
- Mapster v10.0.3
- AutoMapper v16.1.1