Ефективність відображення буде залежати від реалізації (повторювані дзвінки повинні кешуватися, наприклад:) entity.GetType().GetProperty("PropName")
. Оскільки більшість відображень, які я бачу щодня, використовуються для заповнення сутностей із зчитувачів даних або інших структур типу сховища, я вирішив орієнтувати ефективність саме на відображення, коли воно використовується для отримання або встановлення властивостей об'єктів.
Я створив тест, який, на мою думку, є справедливим, оскільки він кешує всі повторювані дзвінки і лише разів реально викликає SetValue або GetValue. Весь вихідний код для тесту на працездатність знаходиться у біт-коді за адресою: https://bitbucket.org/grenade/accessortest . Ретельний аналіз вітається і заохочується.
Я дійшов висновку, що це не практично і не забезпечує помітних поліпшень продуктивності для видалення відображення в рівні доступу до даних, який повертає менше 100 000 рядків у той час, коли реалізація відображення виконана добре.
Наведений вище графік демонструє результат мого маленького орієнтиру і показує, що механізми, які перевершують відображення, роблять це помітно лише після позначки 100 000 циклів. Більшість DAL-файлів одночасно повертають кілька сотень чи, можливо, тисяч рядків, і на цих рівнях відображення спрацьовує чудово.