开发者

Alternatives to PropertyInfo.GetValue() for Mono?

I have a method that has the following signature:

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

I'm using Reflection to get the nestedObject from the objToAccess and return it.

This works well except it's really slow (I have to do this a few hundred thousand times). I came across HyperDescriptor, but since I'm running this on Linux, and Mono doesn't support TypeDescriptionProviders, I can't use it.

Are there any alternatives to using getValue in this case? I could always ha开发者_StackOverflow社区rdcode in overrides for each type, but that is not desirable and would add a lot of maintenance overhead in my case.


Jon Skeet wrote a blog post about using Delegate.CreateDelegate() to speed things up:

http://msmvps.com/blogs/jon_skeet/archive/2008/08/09/making-reflection-fly-and-exploring-delegates.aspx

I don't know if it will work in Mono though.


I'm not sure if Mono supports it, but for such cases (using Reflection in high-load code), I usually dynamically generate special access classes using System.Reflection.Emit. They take a bit longer to generate, but after that, access is lightning fast.


Do you have to use magic strings? Another option is passing in a lambda expression, either by writing the lambda expression into your code or generating a member access lambda expression using Expression Trees. If you go the sxpression tree route, you can compile the expressions very easily and cache them for use.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜