как кешировать отражения в C # - PullRequest
0 голосов
/ 15 апреля 2011

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

Поэтому я был бы признателен, если бы кто-то смог кратко объяснить эту концепцию, а также привести ее примеры, также была бы признательна ссылка на существующие примеры.И, пожалуйста, также опишите отражение атрибутов и их кеширование.Заранее спасибо.

С уважением, Умайр

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

Вы бы кешировали его, как и все остальное:

 var cache = new Dictionary<Type, IEnumerable<Attribute>>();

 // obj is some object
 var type = obj.GetType();
 var attributes = type.GetCustomAttributes(typeof(MyAttribute), true);
 cache.Add(type, attributes);
2 голосов
/ 15 апреля 2011

Я предлагаю не кэшировать отражение (хе-хе), потому что оно (конечно) выполняется во время выполнения.Если вы хотите сократить время поиска и, возможно, динамические накладные расходы

  1. Просто держите ссылку на объект MethodInfo / PropertyInfo, чтобы вызвать
  2. и преобразовать отраженные методы в выражения.Я предлагаю использовать DLINQ, чтобы не изобретать велосипед.См. Здесь больше указателей Разбор строки C # LINQ выражение

И что бы вы ни делали: не усложняйте вещи, преждевременно оптимизируя.

...