AOP through Unity interceptors - Performance monitoring

Today we continue the serie on AOP with Performance monitoring.

The principle is very simple: we want to monitor the time a method took to execute.

Here is the code of the class.
public class PerformanceMonitoringInterceptionBehavior : IInterceptionBehavior
    {
        public IEnumerable<Type> GetRequiredInterfaces()
        {
            return Type.EmptyTypes;
        }

        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            Stopwatch sw = Stopwatch.StartNew();
            var result = getNext()(input, getNext);
            sw.Stop();
             WriteLog(String.Format("Method {0} took {1} ms", input.MethodBase, sw.ElapsedMilliseconds));

            return result;
        }

        public bool WillExecute
        {
            get { return true; }
        }

        private void WriteLog(string message, string args = null)
        {
            var utcNow = DateTime.UtcNow;
            Console.WriteLine(
                "[{0}]-[{1}]: {2} {3}",
                utcNow.ToShortDateString(),
                utcNow.ToLongTimeString(),
                message,
                args);
        }
    }

As you can see, we only start & stop a Stopwatch to watch the time consumed by the method.

As always, you need to specify that you want to use the behavior:
container.RegisterType<IStore, StoreImpl>(
                    new Interceptor<InterfaceInterceptor>(),
                    new InterceptionBehavior<PerformanceMonitoringInterceptionBehavior>());
                 container.RegisterType<IFoo, FooImpl>(
                    new Interceptor<InterfaceInterceptor>(),
                    new InterceptionBehavior<PerformanceMonitoringInterceptionBehavior>());

Comments

Popular posts from this blog

EMGU with Xamarin Forms guide [part 1]

[Xamarin Forms] Custom bottom bordered entry (iOS & Android)

Set your browser on Fire with P5.js