コード例 #1
0
        //Result on my Computer:
        //2081
        //1829
        static void Main(string[] args)
        {
            var test = new Class2();

            GC.Collect();
            GC.WaitForPendingFinalizers();
            var sw = Stopwatch.StartNew();

            for (int i = 0; i < 1000; i++)
            {
                var parameters =
                    new DtpParameters(new Dictionary <int, byte[]> {
                    { 0, new Serializer(typeof(int)).Serialize(0x13) }
                });

                foreach (var methodInfo in test.GetType().GetMethods())
                {
                    var attribute =
                        methodInfo.GetCustomAttributes(false).OfType <ProcessorMethodAttribute>().FirstOrDefault();
                    if (attribute == null)
                    {
                        continue;
                    }

                    var methodName = attribute.MethodName ?? methodInfo.Name;

                    if (methodInfo.ReturnType == typeof(void))
                    {
                        methodInfo.Invoke(test, GetParameters(parameters, methodInfo));
                    }
                    else
                    {
                        methodInfo.Invoke(test, GetParameters(parameters, methodInfo));
                    }
                }
            }
            Console.WriteLine(sw.ElapsedMilliseconds);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            sw.Restart();
            for (int i = 0; i < 1000; i++)
            {
                var parameters =
                    new DtpParameters(new Dictionary <int, byte[]> {
                    { 0, new Serializer(typeof(int)).Serialize(0x13) }
                });
                test.Test(parameters.GetInt32(0));
                test.Test2(parameters.GetInt32(0));
            }
            Console.WriteLine(sw.ElapsedMilliseconds);
            Console.ReadKey();
        }
コード例 #2
0
        private static object[] GetParameters(DtpParameters dtpParameters, MethodInfo methodInfo)
        {
            var methodParameters = methodInfo.GetParameters();
            var parameters       = new object[methodParameters.Length];

            for (int i = 0; i < methodParameters.Length; i++)
            {
                var methodParameterInfo = methodParameters[i];
                var parameterAttribute  =
                    methodParameterInfo.GetCustomAttributes(false)
                    .OfType <ProcessorMethodParameterAttribute>()
                    .FirstOrDefault();

                parameters[i] = dtpParameters.GetValue(i, methodParameters[i].ParameterType, parameterAttribute?.Types);
            }

            return(parameters);
        }