• C#,反射和直接调用的效率差别


    反射时,由于编译器要判断权限,身份等操作,所以比直接操作要慢

    测试代码:

                const int NUM = 1000000;
    
                Stopwatch sw = new Stopwatch();
                sw.Start();
    
                for (int i = 0; i < NUM; i++)
                {
                    ReflectTest rt = new ReflectTest();
                    rt.CountSomething();
                }
    
                sw.Stop();
                Console.WriteLine(sw.ElapsedTicks);
    
    
                sw.Reset();
                sw.Start();
                for (int i = 0; i < NUM; i++)
                {
                    Assembly assembly = Assembly.GetExecutingAssembly();
                    Type t = assembly.GetType("ConsoleApplication1.ReflectTest");
                    ConstructorInfo constructorInfo = t.GetConstructors().OrderBy(c => c.GetParameters().Length).FirstOrDefault();
                    object obj = constructorInfo.Invoke(new object[constructorInfo.GetParameters().Length]);
                    //object obj = Activator.CreateInstance(t);
                    MethodInfo methodInfo = t.GetMethod("CountSomething");
                    methodInfo.Invoke(obj,new object[methodInfo.GetParameters().Length]);
                }
                sw.Stop();
                Console.WriteLine(sw.ElapsedTicks);
    
    
    
                Console.ReadKey();

    结果:

    反射用时是直接调用的2到3倍,所以非特殊需求,项目中就不要用反射吧。。。

  • 相关阅读:
    js操作
    函数知识点补充
    css---position
    css-浮动
    css-边界重叠以及边界塌陷
    css
    css文本类型操作
    POJ 2828 线段树活用
    POJ 3468 线段树
    POJ 3013 SPFA算法,邻接表的使用
  • 原文地址:https://www.cnblogs.com/LouisGuo/p/4673807.html
Copyright © 2020-2023  润新知