public void ComparePerformanceOfExpressionCompileVersusCreateMetaClosure()
        {
            const int ITERATIONS = 100000;

            int xx = 2;

            System.Linq.Expressions.Expression <Func <int, int, int> > multiplierByClosureConstantExpression = (y, z) => xx * (y + z);
            DateTime start;
            TimeSpan duration;

            //start = DateTime.Now;

            //for (int i = 0; i < ITERATIONS; i++)
            //{
            //    multiplierByClosureConstantExpression.Compile();
            //}

            //duration = DateTime.Now - start;
            //Console.WriteLine(duration);

            start = DateTime.Now;
            for (int i = 0; i < ITERATIONS; i++)
            {
                multiplierByClosureConstantExpression.CachedCompile();
            }

            duration = DateTime.Now - start;
            Console.WriteLine(duration);
        }
        public void ComparePerformanceOfExpressionCompileVersusOpenCachedCompile()
        {
            const int ITERATIONS = 100000;

            System.Linq.Expressions.Expression <Func <int, int, int> > multiplierByOpenConstantExpression = (y, z) => y + z;

            DateTime start;
            TimeSpan duration;

            start = DateTime.Now;

            for (int i = 0; i < ITERATIONS; i++)
            {
                multiplierByOpenConstantExpression.Compile();
            }

            duration = DateTime.Now - start;
            Console.WriteLine(PerSecond(ITERATIONS, duration));

            start = DateTime.Now;
            for (int i = 0; i < ITERATIONS; i++)
            {
                multiplierByOpenConstantExpression.CachedCompile();
            }

            duration = DateTime.Now - start;
            Console.WriteLine(PerSecond(ITERATIONS, duration));
        }