Подтвердить что ты не робот

Является ли размышление действительно тем медленным, что я не должен его использовать, когда это имеет смысл?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

ИЗМЕНИТЬ

Вот один ресурс, который я помню: .NET Reflection and Performance

Ответ 5

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

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

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