Improving performance reflection - what alternatives should I consider?

Use Delegate.CreateDelegate to turn a MethodInfo into a strongly-typed delegate. This can improve performance massively. I have a blog post about this with sample code. Note that this is only going to help if you need to set the same properties multiple times - basically it means that a lot of the type checking is done once when you create the delegate, rather than on every invocation.

Marc Gravell has a HyperPropertyDescriptor project which achieves even better performance, but introduces an extra dependency. This project became the jumping off point for the more modern Fast Member (github). In general you would use Fast Member over HyperProperty.


In .NET 4.0 (beta), you can do this with the updated expression trees, using Expression.Block and Expression.Assign - then compile that to a typed delegate; job done.

In .NET 2.0 and above (as Jon mentioned) HyperDescriptor is a reasonable option - it works as a custom PropertyDescriptor implementation, so you just do code like:

// store this collection for optimum performance
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(
    typeof(SomeType));
props["Name"].SetValue(obj, newName);
props["DateOfBirth"].SetValue(obj, newDoB);

This still has a little boxing, but that isn't actually a bottleneck.