Example #1
0
        public void SetPropertyValue()
        {
            ILTest       obj  = new ILTest();
            Type         type = typeof(ILTest);
            PropertyInfo pi   = type.GetProperty("PropertyField");


            ILDelegates.MethodDel_v <string> setPF = ILTools.GetPropertySet <ILDelegates.MethodDel_v <string> >(type, pi);

            setPF(obj, "EEEEEEE");
            if (obj.PropertyField != "EEEEEEE")
            {
                throw new Exception();
            }


            RunBenchmark("Set Property Value", "Reflection", "IL",
                         () =>
            {
                pi.SetValue(obj, "EEEEEEE");
            },
                         () =>
            {
                setPF(obj, "EEEEEEE");
            });
        }
Example #2
0
 public void Setup()
 {
     TestType     = typeof(ILTest);
     ctor         = ILTools.GetConstructor <ILDelegates.TypeConstructor>(TestType);
     fi           = TestType.GetField("ValueField");
     fv           = ILTools.GetFieldValue <ILDelegates.MethodDel>(TestType, fi);
     instance     = (ILTest)ctor();
     pi           = TestType.GetProperty("PropertyField"); getPropVal = ILTools.GetPropertyGet <ILDelegates.MethodDel>(TestType, pi);
     setPropVal   = ILTools.GetPropertySet <ILDelegates.MethodDel_v <string> >(TestType, pi);
     paramLessMi  = TestType.GetMethod("WriteMessage");
     paramLessDel = ILTools.GetMethodDel <ILDelegates.MethodDel>(TestType, paramLessMi);
     paramMi      = TestType.GetMethod("TestMethod");
     paramDel     = ILTools.GetMethodDel <ILDelegates.MethodDel_v <int> >(TestType, paramMi);
 }
Example #3
0
        public void FunctionCall()
        {
            ILTest     obj      = new ILTest();
            Type       type     = typeof(ILTest);
            MethodInfo testMeth = type.GetMethod("TestMethod");



            ILDelegates.MethodDel_v <int> func = ILTools.GetMethodDel <ILDelegates.MethodDel_v <int> >(type, testMeth);

            RunBenchmark("Function Call with Parameter", "Reflection", "IL",
                         () =>
            {
                testMeth.Invoke(obj, new object[] { 100 });
            },
                         () =>
            {
                func(obj, 100);
            });
        }
Example #4
0
        public static void ILTests(int iters)
        {
            ILConstructorTest(iters);


            Type type = typeof(ILTest);

            ILDelegates.TypeConstructor ctor = ILTools.GetConstructor <ILDelegates.TypeConstructor>(type);
            FieldInfo    fi       = type.GetField("ValueField");
            PropertyInfo pi       = type.GetProperty("PropertyField");
            MethodInfo   mi       = type.GetMethod("WriteMessage");
            MethodInfo   testMeth = type.GetMethod("TestMethod");



            ILTest obj = (ILTest)ctor();

            obj.ValueField    = "123";
            obj.PropertyField = "456";

            ILDelegates.MethodDel fv = ILTools.GetFieldValue <ILDelegates.MethodDel>(type, fi);
            object fieldSanityCheck  = fi.GetValue(obj);

            if (fieldSanityCheck is string str)
            {
                if (str != "123")
                {
                    throw new Exception();
                }
            }

            RunTest("Getting Field Value", "Reflection", "IL",
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    object ret = fi.GetValue(obj);
                }
            },
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    object ret = fv(obj);
                }
            });


            ILDelegates.MethodDel getPF = ILTools.GetPropertyGet <ILDelegates.MethodDel>(type, pi);

            object getPropertySanityCheck = getPF(obj);

            if (getPropertySanityCheck is string propertyValue)
            {
                if (propertyValue != "456")
                {
                    throw new Exception();
                }
            }

            RunTest("Get Property Value", "Reflection", "IL",
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    object ret = pi.GetValue(obj);
                }
            },
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    object ret = getPF(obj);
                }
            });



            ILDelegates.MethodDel_v <string> setPF = ILTools.GetPropertySet <ILDelegates.MethodDel_v <string> >(type, pi);

            setPF(obj, "EEEEEEE");
            if (obj.PropertyField != "EEEEEEE")
            {
                throw new Exception();
            }


            RunTest("Set Property Value", "Reflection", "IL",
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    pi.SetValue(obj, "EEEEEEE");
                }
            },
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    setPF(obj, "EEEEEEE");
                }
            });

            ILDelegates.MethodDel write = ILTools.GetMethodDel <ILDelegates.MethodDel>(type, mi);
            object funcCallSanityCheck  = write(obj);

            if (funcCallSanityCheck is string funcRet)
            {
                if (funcRet != "")
                {
                    throw new Exception();
                }
            }

            RunTest("Function Call", "Reflection", "IL",
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    object methRet = mi.Invoke(obj, new object[0]);
                }
            },
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    object methRet = write(obj);
                }
            });


            ILDelegates.MethodDel_v <int> func = ILTools.GetMethodDel <ILDelegates.MethodDel_v <int> >(type, testMeth);

            RunTest("Function Call with Parameter", "Reflection", "IL",
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    testMeth.Invoke(obj, new object[] { 100 });
                }
            },
                    () =>
            {
                for (int i = 0; i < iters; i++)
                {
                    func(obj, 100);
                }
            });
        }