I know that Reflection can be expensive. I have a class that gets/sets to properties often, and one way I figured was to cache the reflection somehow. I’m not sure if I’m supposed to cache an expression or what to do here really. This is what I’m currently doing:
typeof(T).GetProperty(propName).SetValue(obj, value, null);
typeof(T).GetProperty(propName).GetValue(obj, null);
So… what would be the best way to make this quicker?
You should cache results of
and
Another possible approach is to combine PropertyInfo.GetGetMethod Method (or PropertyInfo.GetSetMethod Method for setter) with Delegate.CreateDelegate Method and invoke the resulting delegate every time you need to get/set values. If you need this to work with generics you can use approach from this question: CreateDelegate with unknown types
This should be much faster compared to reflection:
Making reflection fly and exploring delegates
There are also other ways to get/set values in a faster way. You can use expression trees or DynamicMethod to generate the il at runtime. Have a look at these links:
Late-Bound Invocations with DynamicMethod
Delegate.CreateDelegate vs DynamicMethod vs Expression