public void DynamicConversionTest() { var obj1 = new ErrorProneAbstracted(); dynamic proxy1 = new DynamicProxy(obj1, true); ErrorProneAbstracted abst = proxy1; Assert.IsNotNull(abst); }
public void DynamicProxyCastOperationTest() { if (System.Threading.Interlocked.CompareExchange(ref this.disposed, 1, -1) == -1) { var real = new ErrorProneAbstracted(); dynamic proxy = new DynamicProxy(real); IDoWork interf = proxy; if (interf != null) { interf.DoWork(); Assert.IsTrue(interf.Default == 0); interf.Default = 65; interf.DoWorkErrored(12); } } }
public void DynamicProxyFactoryTest() { var obj1 = new ErrorProneAbstracted(); dynamic proxy = DynamicProxyFactory.CreateDynamicProxy(obj1); Assert.IsTrue(proxy.Default == 0); }
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); }
public void FieldAccessorPerformanceTest() { int loopCount = 100; ErrorProneAbstracted instance = new ErrorProneAbstracted(); System.Reflection.FieldInfo fi = typeof(ErrorProneAbstracted).GetField("Id"); ShareDeployed.Proxy.FastReflection.FastField ff = new Proxy.FastReflection.FastField(fi); ShareDeployed.Proxy.FastReflection.FastField<ErrorProneAbstracted> ff2 = new Proxy.FastReflection.FastField<ErrorProneAbstracted>(fi); ShareDeployed.Proxy.FastReflection.FastField<ErrorProneAbstracted, int> ff3 = new Proxy.FastReflection.FastField<ErrorProneAbstracted, int>(fi); var dynField = ShareDeployed.Proxy.FastReflection.DynamicField.Create(fi); Stopwatch sw = new Stopwatch(); sw.Start(); int id = 0; for (int i = 1; i <= loopCount; i++) { fi.SetValue(instance, 12); id = (int)fi.GetValue(instance); } sw.Stop(); long reflTime = sw.ElapsedMilliseconds; sw.Reset(); sw.Start(); for (int i = 1; i <= loopCount; i++) { ff.Set(instance, i); id = (int)ff.Get(instance); } sw.Stop(); long fastFieldTime = sw.ElapsedMilliseconds; sw.Reset(); sw.Start(); for (int i = 1; i <= loopCount; i++) { ff2.Set(instance, i); id = (int)ff2.Get(instance); } sw.Stop(); long fastFieldTime2 = sw.ElapsedMilliseconds; sw.Reset(); sw.Start(); for (int i = 1; i <= loopCount; i++) { ff3.Set(instance, i); id = ff3.Get(instance); } sw.Stop(); long fastFieldTime3 = sw.ElapsedMilliseconds; sw.Reset(); sw.Start(); for (int i = 1; i <= loopCount; i++) { dynField.SetValue(instance, 12); id = (int)dynField.GetValue(instance); } sw.Stop(); long dynFieldTime = sw.ElapsedMilliseconds; Debug.WriteLine(string.Format("Difference is:{0},{1},{2},{3},{4}", reflTime, fastFieldTime, fastFieldTime2, fastFieldTime3, dynFieldTime)); Assert.IsTrue(fastFieldTime3 < fastFieldTime2 && fastFieldTime2 < fastFieldTime); Assert.IsTrue(dynFieldTime < reflTime && fastFieldTime < reflTime); }
public void FastPropertyTest() { var real = new ErrorProneAbstracted(); dynamic proxy = new DynamicProxy(real); Assert.IsTrue(proxy.Default == 0); proxy.Default = 23; Assert.IsTrue(proxy.Default == 23); Assert.IsTrue(TypePropertyMapper.Instance.Get(real.GetType(), "Default") != null); }
public void FastFieldGetSetTest() { ErrorProneAbstracted objInstance = new ErrorProneAbstracted(); System.Reflection.FieldInfo fi = objInstance.GetType().GetField("Id"); Proxy.FastReflection.FastField ff = new Proxy.FastReflection.FastField(fi); Proxy.FastReflection.FastField<ErrorProneAbstracted, int> ff3 = new Proxy.FastReflection.FastField<ErrorProneAbstracted, int>(fi); var dynField = Proxy.FastReflection.DynamicField.Create(fi); int id = -1; Stopwatch sw = new Stopwatch(); sw.Start(); ff.Set(objInstance, 12); id = (int)ff.Get(objInstance); sw.Stop(); long fastElapsed = sw.ElapsedTicks; Assert.IsTrue(id == 12); sw.Reset(); sw.Start(); fi.SetValue(objInstance, 13); id = (int)fi.GetValue(objInstance); sw.Stop(); long reflectElapsed = sw.ElapsedTicks; Assert.IsTrue(id == 13); sw.Reset(); sw.Start(); dynField.SetValue(objInstance, 134); id = (int)dynField.GetValue(objInstance); sw.Stop(); long dynElapsed = sw.ElapsedTicks; Assert.IsTrue(id == 134); sw.Reset(); sw.Start(); ff3.Set(objInstance, 17); id = ff3.Get(objInstance); sw.Stop(); long fastGenElapsed = sw.ElapsedTicks; Assert.IsTrue(id == 17); Debug.WriteLine("FastField {0},FastField generic {1}, Reflection {2}, DynamicField {3}", fastElapsed, fastGenElapsed, reflectElapsed, dynElapsed); Assert.IsTrue(reflectElapsed > fastElapsed); }