我有一个具有以下签名的方法:
private object GetNestedObject<y>(y objToAccess, string nestedObjectName)
我正在使用Reflection从objToAccess获取nestedObject并返回它。
这很好用,除非它真的很慢(我必须这样做几十万次)。 我遇到了HyperDescriptor,但由于我在Linux上运行它,而且Mono不支持TypeDescriptionProviders,我无法使用它。
在这种情况下,有没有其他方法可以使用getValue?我总是可以在每种类型的覆盖中进行硬编码,但这是不可取的,并且在我的情况下会增加很多维护开销。
答案 0 :(得分:2)
Jon Skeet写了一篇关于使用Delegate.CreateDelegate()来加快速度的博文:
我不知道它是否适用于Mono。
答案 1 :(得分:0)
我不确定Mono是否支持它,但对于这种情况(在高负载代码中使用Reflection),我通常使用System.Reflection.Emit
动态生成特殊访问类。它们需要更长的时间来生成,但在此之后,访问速度非常快。
答案 2 :(得分:0)
你必须使用魔术弦吗?另一种选择是传入lambda表达式,方法是将lambda表达式写入代码或使用表达式树生成成员访问lambda表达式。如果你进入sxpression树路径,你可以很容易地编译表达式并缓存它们以供使用。