Разве отражение действительно ТАКОЕ медленное, что мне не следует его использовать, когда в этом есть смысл?

Возможный дубликат:
Насколько дорого обходится отражение .NET?

"Элегантное" решение для проблема, с которой я столкнулся, заключается в использовании атрибутов для связывания класса и его свойств с другими. Проблема в том, чтобы преобразовать его в другое, мне пришлось бы использовать отражение. Я рассматриваю это для серверного приложения, которое будет размещено в облаке.

Я слышал много грохота «отражение идет медленно, не используйте его», насколько медленно? Неужели это настолько интенсивно, что мое процессорное время настолько увеличится, что я буду буквально платить за свое решение использовать отражение в нижней части моей архитектуры в облаке?


person Professional Sounding Name    schedule 05.03.2009    source источник


Ответы (5)


На всякий случай, если вы не видите обновления по исходному вопросу: когда вы размышляете, чтобы найти все типы, поддерживающие определенный атрибут, у вас есть прекрасная возможность использовать кеширование. Это означает, что вам не нужно использовать отражение более одного раза во время выполнения.

Чтобы ответить на общий вопрос, отражение выполняется медленнее, чем вызовы необработанных скомпилированных методов, но намного, намного быстрее, чем доступ к базе данных или файловой системе, и практически все веб-серверы делают эти вещи постоянно.

person Daniel Earwicker    schedule 05.03.2009
comment
+1 за кеширование результата. Если вы относитесь к отражению как к чтению информации из файловой системы, вы не ошибетесь - делайте это, но не чаще, чем нужно. - person stevemegson; 06.03.2009

Это во много раз быстрее, чем доступ к файловой системе.

Это во много раз быстрее, чем доступ к базе данных по сети.

Это во много раз быстрее, чем отправка HTTP-ответа браузеру.

person yfeldblum    schedule 05.03.2009

Наверное, вы этого даже не заметите. Всегда сначала профилируйте, прежде чем думать об оптимизации.

person Esko Luontola    schedule 05.03.2009

Я задавался вопросом о том же; но оказывается, что отражение не так уж и плохо. Я не могу найти ресурсы (я попытаюсь перечислить их, когда найду их), но я думаю, что помню, как читал, что это было, возможно, в 2–3 раза медленнее. 50% или 33% поста по-прежнему быстро.

Кроме того, я под капотом веб-форм ASP.net и MVC делаю кучу рефлексии, так насколько же это может быть медленно?

ИЗМЕНИТЬ

Я помню, как читал один ресурс: .Net Reflection and Performance

person Giovanni Galbo    schedule 05.03.2009

Хм, я стараюсь избегать рефлексии, если могу, но если мне нужно найти решение, а отражение дает мне элегантный способ решить текущую проблему, я с радостью воспользуюсь отражением.

Но нужно сказать, что я считаю, что отражение не должно использоваться для «грязных трюков». В настоящий момент я также работаю над решением, в котором я использую настраиваемые атрибуты для украшения некоторых классов, и да, мне придется использовать отражение, чтобы узнать, был ли класс / свойство / что-то еще украшено моим индивидуальным оформлением. атрибут.

Я также думаю, что все дело в том, «сколько вы делаете рефлексии»? Если есть возможность, я пытаюсь кэшировать свои результаты. Например, в решении, над которым я работаю: при запуске приложения я проверяю определенные типы в определенной сборке, были ли эти типы украшены моим атрибутом, и я сохраняю их в словаре.

person Frederik Gheysels    schedule 05.03.2009