Mono中PropertyInfo.GetValue()的替代方法是什么?

3

我有一个方法,其签名如下:

 private object GetNestedObject<y>(y objToAccess, string nestedObjectName)

我使用反射从objToAccess中获取嵌套对象并返回它。除了速度很慢(我需要执行几十万次),这个方法还是有效的。我发现了HyperDescriptor,但由于我在Linux上运行,而且Mono不支持TypeDescriptionProviders,所以我不能使用它。在这种情况下,是否有任何替代方案来使用getValue?我可以为每种类型硬编码覆盖,但这不是理想的,而且在我的情况下会增加很多维护开销。

顺便说一下,我正在缓存propertyInfo,这提供了轻微的速度提升。 - Tachy
3个回答

2

0

我不确定Mono是否支持它,但对于这种情况(在高负载代码中使用反射),我通常使用System.Reflection.Emit动态生成特殊访问类。它们需要更长的时间来生成,但之后访问速度非常快。


0

你必须使用魔法字符串吗?另一种选择是传递lambda表达式,可以通过将lambda表达式编写到代码中或使用表达式树生成成员访问lambda表达式来实现。如果选择表达式树路线,您可以很容易地编译这些表达式并将它们缓存以供使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接