Sitemap

AutoMapper o mappatura a portata di mano, quale è più efficiente?

3 min readJan 29, 2021

Ciao ragazzi!

Credo che già tante persone abbiano usato la biblioteca AutoMapper, per effettuare mappature tra oggetti. È un’ottima libreria, molto semplice, perché facilita molto, quando è necessario fare mappature tra oggetti di input e output.

In diversi luoghi in cui ho lavorato, ci sono diverse applicazioni che utilizzano AutoMapper.

Ma ho anche visto che, in vari momenti, ha iniziato a compromettere le prestazioni di alcune applicazioni.

Pertanto, quando un oggetto doveva essere mappato o eseguito, un’applicazione impiegava molto tempo per rispondere, e talvolta l’applicazione con una CPU elevata, che ha persino eliminato l’applicazione, a seconda della quantità di proprietà o speciali dell’oggetto.

Con questo, per risolvere questi vari problemi di prestazioni, modificare lo scambio AutoMapper, per la mappatura fatta a mano (a livello di programmazione).

Qui voglio mostrarvi un esempio, che mostra il tempo di esecuzione di AutoMapper rispetto al tempo di esecuzione di una mappatura fatta a mano.

Per questo esempio, ho creato l’entità Employee, con aggregazioni di altre classi come Address e un elenco di Telefoni

Questo oggetto verrà mappato all’oggetto EmployeeViewModel, contenente praticamente gli stessi dati dell’entità Employee.

Si noti che non esiste un oggetto così complesso, AutoMapper dovrebbe eseguire questo tipo di mappatura senza problemi. Ma qui voglio dimostrare il tempo di esecuzione della mappatura con AutoMapper con il tempo di esecuzione per eseguire questa mappatura a livello di programmazione.

Per la creazione con i dati Faker, utilizzo la libreria Bogus, per generare dati casuali dei dipendenti.

Quindi, ho creato il mio metodo di mappatura nel codice, per fare il confronto con l’AutoMapper.

Ora vedi sotto, quello sulla Console, e sto usando Stopwatch, per calcolare il tempo di esecuzione dei metodi.

Per prima cosa eseguiremo l’AutoMapper e poi eseguiremo il metodo Map che ho creato nel codice.

Quando si esegue la console, confrontare il tempo di esecuzione dei metodi:

Guarda che la mappatura AutoMapper ha richiesto: 0490041ms

E il metodo Map(), che ho creato per eseguire la mappatura, ha impiegato molto tempo per essere eseguito a: 0006503ms

Differenza di 0483583ms, ovvero il metodo Map() che ho creato, eseguito circa 75 volte più velocemente dell’AutoMapper.

Eseguirò ancora una volta:

Differenza di 0400273ms, metodo Map(), è stato eseguito circa 75 volte più velocemente di AutoMapper.

L’idea qui è di dimostrare che a volte non abbiamo bisogno di usare librerie che fanno cose automatiche, poiché possiamo avere problemi di prestazioni, come nel caso che ho menzionato. Perché cambiando la strategia, il sistema è tornato a funzionare e con una risposta molto più rapida di quanto non fosse con AutoMapper.

Può essere che, per creare metodi di mappatura, possiamo sprecare molto tempo nello sviluppo, ma può darsi che tu non abbia problemi di prestazioni nella tua applicazione.

Ma ciò non significa che non dovresti usare AutoMapper, con questo articolo volevo dimostrare un problema che avevo con le prestazioni in una delle applicazioni e quale soluzione ho fatto per risolvere il problema.

Segui l’esempio che ho usato sul mio Github:

Alla Prossima!

--

--

Fernando Mendes
Fernando Mendes

Written by Fernando Mendes

Software Architect .NET C# | Microsoft MVP 🏆🏆 | Co-Founder community JunDevelopers

No responses yet