我正在研究一个简单的ORM库,事实上非常简单......
我有一个类型为T
的查询public IEnumerable<T> Query<T>(string query)
该方法采用T类,它获取属性,循环遍历它们并相应地设置它们
aProperty.SetValue(tmpGenericObjectOfTypeT, newValue, null);
我的问题是SetValue非常慢,我看到了两个选择,使用Reflection.Emit或使用委托,遗憾的是我不知道如何做任何这些。
正如我所读到的,使用代理更优雅,我想要那个解决方案,但我真的不知道怎么做,我已经搜索并发现了很多关于如何调用方法使用Delegates,但不知道如何设置属性......
答案 0 :(得分:1)
Dynamic methods或expression trees是这里的方法。快速而简单。
Actions/Funcs
并将它们缓存在一个与原始类型相关的对象中。你应该会看到至少比反射提高20倍的性能(如果不是更像50-100x)。
答案 1 :(得分:0)
HyperDescriptor工作得很好(基于ReflectionEmit)。 http://www.codeproject.com/Articles/18450/HyperDescriptor-Accelerated-dynamic-property-acces
“委托”方法可能是指表达式树?