/// <summary>
        /// Tests performance for the given action.
        /// </summary>
        public static void TestPerf(this Action action, string name)
        {
            var info = new PerformanceInfoConsumer(name);

            info.Start();
            action();
            info.Stop(string.Empty);
        }
        /// <summary>
        /// Tests performance for the given action.
        /// </summary>
        public static void TestPerf(this Func <string> action, string name)
        {
            var info = new PerformanceInfoConsumer(name);

            info.Start();
            var message = action();

            info.Stop(message);
        }
        /// <summary>
        /// Tests performance for the given function.
        /// </summary>
        public static T TestPerf <T>(this Func <PerformanceTestResult <T> > func, string name)
        {
            var info = new PerformanceInfoConsumer(name);

            info.Start();
            var res = func();

            info.Stop(res.Message);
            return(res.Result);
        }
        /// <summary>
        /// Tests performance for the given function.
        /// </summary>
        public static TResult TestPerf <T, TResult>(this Func <T, TResult> func, string name, T a)
        {
            var info = new PerformanceInfoConsumer(name);

            info.Start();
            var res = func(a);

            info.Stop();
            return(res);
        }
        /// <summary>
        /// Tests performance for the given function.
        /// </summary>
        public static T TestPerf <T>(this Func <T> func, string name)
        {
            var info = new PerformanceInfoConsumer(name);

            info.Start();
            var res = func();

            info.Stop();
            return(res);
        }
        /// <summary>
        /// Tests performance for the given action.
        /// </summary>
        public static void TestPerf(this Action action, string name, int count)
        {
            var info = new PerformanceInfoConsumer(name + " x " + count.ToInvariantString(), 10000);

            info.Start();
            while (count > 0)
            {
                action();
                count--;
            }
            info.Stop();
        }
        /// <summary>
        /// Tests performance for the given action.
        /// </summary>
        public static void TestPerf(this Func <string> action, string name, int count)
        {
            var info = new PerformanceInfoConsumer(name + " x " + count.ToInvariantString(), 10000);

            info.Start();
            var message = string.Empty;

            while (count > 0)
            {
                message = action();
                count--;
            }
            info.Stop(message);
        }
        /// <summary>
        /// Tests performance for the given function.
        /// </summary>
        public static T TestPerf <T>(this Func <T> func, string name, int count)
        {
            var res  = default(T);
            var info = new PerformanceInfoConsumer(name + " x " + count.ToInvariantString(), 10000);

            info.Start();
            while (count > 0)
            {
                res = func();
                count--;
            }
            info.Stop();
            return(res);
        }
        /// <summary>
        /// Tests performance for the given function.
        /// </summary>
        public static T TestPerf <T>(this Func <PerformanceTestResult <T> > func, string name, int count)
        {
            var info = new PerformanceInfoConsumer(name + " x " + count.ToInvariantString(), 10000);

            info.Start();
            PerformanceTestResult <T> res = null;

            while (count > 0)
            {
                res = func();
                count--;
            }
            info.Stop(res.Message);
            return(res.Result);
        }