El rendimiento de la reflexión dependerá de la implementación (las llamadas repetitivas deben almacenarse en caché, por ejemplo:) entity.GetType().GetProperty("PropName")
. Como la mayor parte de la reflexión que veo a diario se usa para llenar entidades de lectores de datos u otras estructuras de tipo de repositorio, decidí comparar el rendimiento específicamente en la reflexión cuando se usa para obtener o establecer propiedades de un objeto.
Diseñé una prueba que creo que es justa, ya que almacena en caché todas las llamadas repetidas y solo veces la llamada real de SetValue o GetValue. Todo el código fuente para la prueba de rendimiento está en bitbucket en: https://bitbucket.org/grenade/accessortest . El escrutinio es bienvenido y alentado.
La conclusión a la que he llegado es que no es práctico y no proporciona mejoras de rendimiento notables para eliminar la reflexión en una capa de acceso a datos que devuelve menos de 100,000 filas en un momento en que la implementación de la reflexión se realiza correctamente.
El gráfico anterior muestra el resultado de mi pequeño punto de referencia y muestra que los mecanismos que superan el reflejo, solo lo hacen notablemente después de la marca de 100,000 ciclos. La mayoría de los DAL solo devuelven varios cientos o quizás miles de filas a la vez y en estos niveles la reflexión funciona bien.