Friday, August 13, 2010

Fast Reflection Library

Hi there,

Recently while browsing Microsoft Codeplex projects I’ve found another good thing. They call it ‘Fast Reflection Library’, it is written in C# and its purpose is to provide the same as part of the reflection features like executing method dynamically but give simple and faster implementations.

Example of usage:

using System;
using System.Reflection;
using FastReflectionLib;
    
namespace SimpleConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            PropertyInfo propertyInfo = typeof(string).GetProperty("Length");
            MethodInfo methodInfo = typeof(string).GetMethod("Contains");
    
            string s = "Hello World!";
    
            // get value by normal reflection
            int length1 = (int)propertyInfo.GetValue(s, null);
            // get value by the extension method from FastReflectionLib,
            // which is much faster
            int length2 = (int)propertyInfo.FastGetValue(s);
    
            // invoke by normal reflection
            bool result1 = (bool)methodInfo.Invoke(s, new object[] { "Hello" });
            // invoke by the extension method from FastReflectionLib,
            // which is much faster
            bool result2 = (bool)methodInfo.FastInvoke(s, new object[] { "Hello" });
        }
    }
}

Although DataObjects.Net contains its own implementation of fast reflection (see: Xtensive.Core.Reflection), I like in this one the following aspects: clear & minimalistic design, simple and obvious API & ease of use. It took several seconds to understand the general idea and start using it. I think that this might be a good example of how library should look like: it should solve 1 concrete problem in most efficient way and do nothing more in order not to turn into another dinosaur.

No comments:

Post a Comment