public void MethodCallingPerformance()
        {
            int iter = 5000;
            var obj1 = new ErrorProneAbstracted();
            var obj2 = new ErrorProneAbstracted();
            dynamic proxy1 = new DynamicProxy(obj1, true);
            dynamic proxy2 = new DynamicProxy(obj2, true, true);
            int result = 1;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < iter; i++)
            {
                proxy1.DoWork();
                result = proxy1.DoWork2(12);
                result = proxy1.DoWork3(12, 123);
            }
            sw.Stop();
            long tick1 = sw.ElapsedMilliseconds;
            sw.Reset();

            sw.Start();
            for (int i = 0; i < iter; i++)
            {
                proxy2.DoWork();
                result = proxy2.DoWork2(12);
                result = proxy2.DoWork3(12, 123);
            }
            sw.Stop();
            long tick2 = sw.ElapsedMilliseconds;

            Debug.WriteLine("{0} - {1} Diff: {2}", tick1, tick2, tick1 - tick2);
            Assert.IsTrue(tick1 > tick2);
        }