Эффективность отражения будет зависеть от реализации (повторяющиеся вызовы должны кэшироваться, например:) entity.GetType().GetProperty("PropName")
. Поскольку большая часть отражений, которые я вижу в повседневной жизни, используется для заполнения сущностей из устройств чтения данных или других структур типов репозиториев, я решил сравнить производительность именно с отражением, когда оно используется для получения или установки свойств объектов.
Я разработал тест, который я считаю справедливым, поскольку он кэширует все повторяющиеся вызовы и только раз фактический вызов SetValue или GetValue. Весь исходный код для теста производительности находится в bitbucket по адресу: https://bitbucket.org/grenade/accessortest . Проверка приветствуется и поощряется.
Я пришел к выводу, что это непрактично и не обеспечивает заметных улучшений производительности для удаления отражений в слое доступа к данным, который возвращает менее 100 000 строк в тот момент, когда реализация отражений выполнена хорошо.
Приведенный выше график демонстрирует результаты моего маленького теста и показывает, что механизмы, которые превосходят отражение, делают это заметно только после отметки в 100 000 циклов. Большинство DAL возвращают только несколько сотен или, возможно, тысяч строк одновременно, и на этих уровнях отражение работает просто отлично.