我知道反射可能会很昂贵。我有一个经常获取/设置属性的类,我想到的一种方法是以某种方式缓存反射。我不确定我是否应该缓存表达式或在这里真正做什么。这就是我目前正在做的事情:
typeof(T).GetProperty(propName).SetValue(obj, value, null);
typeof(T).GetProperty(propName).GetValue(obj, null);
那么...加快速度的最佳方法是什么?
您应该缓存结果
typeof(T).GetProperty(propName);
and
typeof(T).GetProperty(propName);
另一种可能的方法是结合PropertyInfo.GetGetMethod 方法 http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.getgetmethod.aspx (or PropertyInfo.GetSetMethod 方法 http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.getsetmethod.aspx对于二传手)Delegate.CreateDelegate方法 http://msdn.microsoft.com/en-us/library/system.delegate.createdelegate.aspx并在每次需要获取/设置值时调用生成的委托。如果您需要它与泛型一起使用,您可以使用此问题中的方法:CreateDelegate 具有未知类型 https://stackoverflow.com/questions/2490828/createdelegate-with-unknown-types/2493903#2493903
与反射相比,这应该要快得多:让反思飞翔并探索代表 http://codeblog.jonskeet.uk/2008/08/09/making-reflection-fly-and-exploring-delegates/
还有其他方法可以更快地获取/设置值。您可以使用表达式树或 DynamicMethod 在运行时生成 il。看看这些链接:
使用 DynamicMethod 进行后期绑定调用 http://lostechies.com/jimmybogard/2009/08/06/late-bound-invocations-with-dynamicmethod/
Delegate.CreateDelegate vs DynamicMethod vs 表达式 https://stackoverflow.com/questions/597819/delegate-createdelegate-vs-dynamicmethod-vs-expression
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)