如何在C#中缓存反射

时间:2011-04-14 20:29:06

标签: c# reflection system.reflection

你好 我对反射很熟悉,我已经通过大量的例子,我知道它是如何工作的,以及我们可以使用它的目的。但我没有得到缓存反射的任何例子,我也不知道它是什么意思。不知何故,我必须在我正在做的项目中使用反射缓存。

因此,如果有人可以简单地解释这个概念并给出一些例子,我将不得不承认,现有例子的链接也将受到赞赏。并且还请描述属性的反映及其缓存。提前谢谢。

此致 Umair

2 个答案:

答案 0 :(得分:5)

你会像其他任何东西一样缓存它:

 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);

答案 1 :(得分:2)

我建议不要缓存反射(hehe),因为它(当然)是由运行时完成的。如果你的意思是减少查找时间和动态调用开销

  1. 只需保持对MethodInfo / PropertyInfo对象的引用即可调用
  2. 将反射的方法转换为表达式。我建议使用DLINQ以免重新发明轮子。有关详细信息,请参阅此处Parsing a string C# LINQ expression
  3. 无论你做什么:不要过早地优化事情。