2

我正在开发一个简单的 ORM 库,实际上非常简单......

我有一个类型为 T 的查询

public IEnumerable<T> Query<T>(string query)

该方法采用 T 类,它获取属性,遍历它们并相应地设置它们

aProperty.SetValue(tmpGenericObjectOfTypeT, newValue, null);

我的问题是 SetValue 非常慢,我看到了两种选择,使用 Reflection.Emit 或使用委托,不幸的是我不知道如何做这些。

正如我所读到的,使用委托更优雅,我想要那个解决方案,但我真的不知道该怎么做,我搜索并发现了很多关于如何使用委托调用方法的信息,但不是如何设置属性...

4

2 回答 2

1

知道如何获取/设置属性的动态方法表达式树是这里的方法。快速简单。

  • 使用反射检查您的类型的接口
  • 构建 getter/setterActions/Funcs并将它们缓存在将它们与原始类型相关联的对象中。
  • 在后续操作中使用缓存的 getter/setter。

与反射相比,您应该会看到至少 20 倍的性能提升(如果不是 50-100 倍的话)。

于 2012-05-16T03:37:40.723 回答
0

HyperDescriptor 工作得很好(基于ReflectionEmit)。 http://www.codeproject.com/Articles/18450/HyperDescriptor-Accelerated-dynamic-property-acces

“委托”方法可能是指表达式树?

于 2012-05-16T03:33:49.917 回答