Quanto costa la riflessione .NET?

 C Programming >> Programmazione C >  >> Tags >> .NET
Quanto costa la riflessione .NET?

Nel suo discorso The Performance of Everyday Things, Jeff Richter mostra che chiamare un metodo per riflessione è circa 1000 volte più lento piuttosto che chiamarlo normalmente.

Il consiglio di Jeff:se devi chiamare il metodo più volte, usa la riflessione una volta per trovarlo, quindi assegnalo a un delegato , quindi chiama il delegato.


È. Ma dipende da cosa stai cercando di fare.

Uso la riflessione per caricare dinamicamente gli assembly (plugin) e la sua "penalità" sulle prestazioni non è un problema, poiché l'operazione è qualcosa che faccio durante l'avvio dell'applicazione.

Tuttavia, se stai riflettendo all'interno di una serie di cicli nidificati con chiamate di riflessione su ciascuno, direi che dovresti rivedere il tuo codice :)

Per le operazioni "un paio di volte", la riflessione è perfettamente accettabile e non noterai alcun ritardo o problema con essa. È un meccanismo molto potente ed è persino utilizzato da .NET, quindi non vedo perché non dovresti provarlo.


Le prestazioni di Reflection dipenderanno dall'implementazione (le chiamate ripetitive dovrebbero essere memorizzate nella cache, ad esempio:entity.GetType().GetProperty("PropName") ). Poiché la maggior parte della riflessione che vedo quotidianamente viene utilizzata per popolare entità da lettori di dati o altre strutture di tipo repository, ho deciso di confrontare le prestazioni in modo specifico sulla riflessione quando viene utilizzata per ottenere o impostare le proprietà di un oggetto.

Ho ideato un test che ritengo corretto poiché memorizza nella cache tutte le chiamate ripetute e solo volte la chiamata SetValue o GetValue effettiva. Tutto il codice sorgente per il test delle prestazioni è in bitbucket su:https://bitbucket.org/grenade/accessortest. Il controllo è benvenuto e incoraggiato.

La conclusione a cui sono giunto è che non è pratico e non fornisce notevoli miglioramenti delle prestazioni per rimuovere la riflessione in un livello di accesso ai dati che restituisce meno di 100.000 righe in un momento in cui l'implementazione della riflessione è eseguita correttamente.

Il grafico sopra mostra l'output del mio piccolo benchmark e mostra che i meccanismi che superano la riflessione, lo fanno notevolmente solo dopo il segno di 100.000 cicli. La maggior parte dei DAL restituisce solo diverse centinaia o forse migliaia di righe alla volta e a questi livelli la riflessione funziona bene.