zoukankan      html  css  js  c++  java
  • 反射的性能测试 记录

    .net的反射 真可谓让人忧 让人喜
    有了反射 在.net中工厂模式更容易实现 而且耦合性更低 但是 反射对性能的消耗也是不可忽视的
    但是 反射对性能的损耗到底有多大?我从来没做过测试 今天无事 决定作个测试 现在将测试过程记录下来 以备以后参考:(如果大家有什么更好的测试方法 或提高性能的方法可要贴出来共享一下哦)

    测试程序:(需要被反射而获得的类)
    using System;
    using Edot.Interface;
    namespace Edot.TestReflection
    {
      public class A : IA
      {
         public A()
        {
        }
        public void Print()
        {
            Console.WriteLine( "The A Class" );
         }
     };
    }

    接口:
    using System;
    namespace Edot.Interface
    {
     public interface IA
     {
      void Print();
     }
    }
    用反射创建类的类:
    using System;
    using System.Reflection;
    using Edot.Interface;
    namespace Edot.Create
    {
     public class Create
     {
      private static IA _ia = null;
      public Create()
      {
      }
      public static IA CreateA()
      {
       if ( _ia == null )
       {
        Type[] type = new Type[]{};
        ConstructorInfo ctor = Assembly.LoadFrom( "A.dll" ).GetType( "Edot.TestReflection.A" ).GetConstructor( type );
        _ia = ctor.Invoke( type ) as IA;
       }
       return _ia;
      }
     };
    }
    测试类:
    using System;
    using Edot.Interface;
    namespace Edot.Test
    {
     public class Test
     {
      public Test()
      {
      }
      public static void Main()
      {
       Console.WriteLine( DateTime.Now.ToString( "mm:ss:fffff" ) );
       IA ia = Edot.Create.Create.CreateA();
       ia.Print();
       Console.WriteLine( DateTime.Now.ToString( "mm:ss:fffff" ) );
       Console.ReadLine();
      }
     };
    }
    最后获得的结果:

    从结果 我们可以看出 反射的性能并不是被那些书上说的一无是处
    也许这个程序太小 看不出
    但是 如果我们使用一些性能优化的方法 性能可能进一步提高

    下面我们对不使用反射的情况测试一下 修改 使用反射创建类的类
    为(不使用反射):
    using System;
    using System.Reflection;
    using Edot.Interface;
    using Edot.TestReflection;
    namespace Edot.Create
    {
     public class Create
     {
      private static IA _ia = null;
      public Create()
      {
      }
      public static IA CreateA()
      {
       if ( _ia == null )
       {
        _ia = new A();
       }
       return _ia;
      }
     };
    }
    结果如下图:

    看到结果 你也许很惊讶 反射对性能的消耗并不是特别大阿
    而且使用反射 程序耦合度几乎降到 “0”是几乎阿 呵呵
    我觉得为使程序的扩展性好 这么一点点损耗是值得的 而且我们还可以使用很多技术来优化 反射 比如
    缓存阿 
    上面只是个人愚见 各位仁兄 有何见教:

  • 相关阅读:
    Echarts实现区级行政区划地图
    webpack4.x开发环境配置
    说说说vue.js中的组
    原生JS实现购物车功能详解
    面向对象的一些重要的基本概念
    Lucene教程
    开启事务时mybatis返回主键id
    生成二维码的方法,基于zxing
    mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入
    一:验证微信的Token
  • 原文地址:https://www.cnblogs.com/yuyijq/p/303219.html
Copyright © 2011-2022 走看看