Это использование атрибутов в .Net(С#) дорого?

Я хотел бы знать, дорого ли использование атрибутов в .Net, в частности С#, и почему или почему нет?

Я спрашиваю о С# специально, если нет разницы между различными .Net-языками (потому что библиотеки базового класса одинаковы?).

Все новые .Net-технологии широко используют атрибуты, такие как Linq to SQL, ASP.Net MVC, WCF, корпоративная библиотека и т.д., и мне было интересно, какое влияние это будет на производительность. Некоторые классы автоматически присваиваются определенными атрибутами, или эти атрибуты необходимы для определенных функций/функций.

Возникает ли вопрос расхода зависит от конкретных деталей реализации? Как атрибуты скомпилированы в IL? Они кэшируются автоматически или это зависит от разработчика?

Ответ 1

"Использование атрибутов" слишком расплывчато. Получение атрибутов - это операция отражения эффективно - вы не захотите регулярно делать это в цикле - но их нетрудно включить в метаданные, а типичный шаблон использования (IMO) заключается в создании другого представления (например, схема с памятью) после прочтения атрибутов один раз.

Вполне возможно, что некоторые кэширования задействованы, но я, вероятно, буду кэшировать другое представление. Например, если бы я украшал значения enum описаниями, я бы обычно извлекал атрибуты один раз, чтобы построить строку для перечисления словаря (или наоборот).

Ответ 2

Это зависит от того, как вы их используете... Некоторые атрибуты предназначены только для информационных целей (например, ObsoleteAttribute), поэтому они не оказывают никакого влияния на производительность выполнения. Другие атрибуты используются компилятором (например, DllImportAttribute) или посткомпиляторами, такими как PostSharp, поэтому затраты во время компиляции, а не во время выполнения. Однако, если вы используете отражение для проверки атрибутов во время выполнения, это может быть дорого.