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

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

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

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

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

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


person JDMX    schedule 27.02.2010    source источник


Ответы (3)


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

person Hans Passant    schedule 28.02.2010
comment
Я реализовал список кэширования methodinfo и обнаружил, что на самом деле времена были почти одинаковыми. Думаю, мне нужно искать в другом месте для повышения производительности. - person JDMX; 28.02.2010

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

person Josh    schedule 27.02.2010
comment
может быть полезно, но я нахожусь в dotnet 2, поэтому я не могу использовать сразу. но с некоторой доработкой... - person JDMX; 28.02.2010

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

person John Saunders    schedule 27.02.2010
comment
Сама по себе не критическая проблема с производительностью, но иногда бывает достаточно лагов, чтобы поработать над этим — неплохая идея. Кроме того, 90%+ моих вызовов отражения происходят с двумя функциями, поэтому небольшие изменения могут иметь огромное влияние. - person JDMX; 28.02.2010