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); }