繁体   English   中英

反射:使用委托设置通用对象的属性

[英]Reflection: Set a property of a generic object using delegates

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

我有一个T型查询

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

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

aProperty.SetValue(tmpGenericObjectOfTypeT, newValue, null);

我的问题是SetValue的运行速度非常慢,我看到了两个选择,即使用Reflection.Emit或使用委托,但是我不知道如何执行其中的任何一种。

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

知道如何获取/设置属性的动态方法表达式树是解决问题的方法。 快速简便。

  • 使用反射检查您的类型的界面
  • 构建getter / setter Actions/Funcs并将其缓存在将它们与原始类型相关联的对象中。
  • 在后续操作中使用了缓存的获取器/设置器。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM