zoukankan      html  css  js  c++  java
  • 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倍,所以非特殊需求,项目中就不要用反射吧。。。

  • 相关阅读:
    onclick中的函数的参数this
    classList的使用
    设置点击鼠标时不跳转
    模块补充shutil,logging
    re模块拾遗和递归函数
    正则表达式-re模块
    软件开发规范
    自定义模块2
    常用模块
    初识自定义模块
  • 原文地址:https://www.cnblogs.com/LouisGuo/p/4673807.html
Copyright © 2011-2022 走看看