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
typeof(T).GetProperty(propName);
and
typeof(T).GetProperty(propName);
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
Well, the simplest answer is that you could cache the PropertyInfo
object returned by GetProperty
:
var propInfo = typeof(T).GetProperty(propName);
propInfo.SetValue(obj, value, null);
propInfo.GetValue(obj, null);
// etc.
That would eliminate the need for Reflection to repeatedly find the property in the class and eliminate the bulk of the performance hit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With