Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Должен ли я преобразовать PropertyInfo.SetProperty() в MethodInfos для выполнения

Автор вопроса: JDMXОтветов: 3

Я только что прочитал Насколько дорого обходится отражение .NET? Я делаю многочисленные вызовы отражения для свойства наборы и задавался вопросом, должен ли я смотреть на преобразование всех моих вызовов PropertyInfo.SetProperty() в вызовы MethodInfos, чтобы я мог запускать Delegate.CreateDelegate против.

Наконец, если я это сделаю, я предполагаю, что мне нужно хранить каждую MethodInfo или свойство на основе типа объекта, даже если имя свойства и тип одинаковы для нескольких типов.

к вашему сведению. Я использую дотнет 2

Добавлен ----

Я не имею дело с критической проблемой производительности как таковой, но иногда бывает достаточно задержек, поэтому работа над этим неплохая идея, если это будет иметь значение. Кроме того, 90%+ моих вызовов отражения происходят с двумя функциями, поэтому небольшие изменения могут иметь огромное влияние на все приложение.

delegatesreflection

Ответы

Ответ 1 · рейтинг 1 · Hans Passant

Это не имеет никакого значения. Стоимость заключается в извлечении метаданных из сборки. Является ли это PropertyInfo или MethodInfo, отражающим установщик или получатель, не имеет значения. Засеките это с помощью System.Diagnostics.Stopwatch, чтобы убедиться в том, что доказательство находится в пудинге. Убедитесь, что вы указали время первого использования, после этого оно будет быстрым благодаря кешированию метаданных.

Ответ 2 · рейтинг 1 · Josh

Как сказал Джон, ты лучший человек, чтобы ответить на этот вопрос. Сделайте быстрый тест в LINQPad, используя оба метода, и посмотрите, оправдывает ли ваше использование оптимизацию. Но, возможно, лучшей оптимизацией (если это имеет смысл в вашей ситуации) будет попытка преобразовать ваше отражение в деревья выражений.

Ответ 3 · John Saunders

Если у вас нет проблем с производительностью, не решайте проблему с производительностью.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы