C# 如何加速FieldInfo.GetValue()调用?

C# 如何加速FieldInfo.GetValue()调用?,c#,reflection,mono,C#,Reflection,Mono,我在自定义序列化程序中大量使用FieldInfo.GetValue()调用。这个功能真的很慢 1)有没有一种便携式的加速方法?我不需要FieldInfo.GetValue()实现进行任何检查,我只需要快速获取该值 现在是关于一种不可移植的方式。我用单声道。我的分析器显示FieldInfo.GetValue()大部分时间都花在MonoField.CheckGeneric()上。对MonoField.GetValueInternal()的调用非常快,但是是私有的!当然,我可以使用反射直接调用这个私有

我在自定义序列化程序中大量使用FieldInfo.GetValue()调用。这个功能真的很慢

1)有没有一种便携式的加速方法?我不需要FieldInfo.GetValue()实现进行任何检查,我只需要快速获取该值

现在是关于一种不可移植的方式。我用单声道。我的分析器显示FieldInfo.GetValue()大部分时间都花在MonoField.CheckGeneric()上。对MonoField.GetValueInternal()的调用非常快,但是是私有的!当然,我可以使用反射直接调用这个私有方法(因为我不进行一般检查),但反射调用会扼杀所有性能提升


2)是否可以快速调用此私有方法(不需要反射开销,也不需要修改单声道源以使其公开)?

您可以发出il来执行获取值。因此,在第一次调用任何类型后,缓存IL。但是,如果有很多类型,这可能不起作用

+1:听起来很有趣,你能详细说明一下吗,因为我从来没有直接使用过IL。它是可移植的吗(在Mono中可以工作)?IL是.net的基础,所以最好是这样。我会建议只使用dynamic,但我不知道mono是否支持它