在项目开发过程中有用反射获的程序集类型来创建该类型的新实例,但是通过性能测试后发现用这种方法来实现的功能模块耗时很严重,不用反射来做的话实现起来比较麻烦,请各位高手们指点下,有什么方法可以对反射进行性能优化~~

解决方案 »

  1.   

    C#主要支持 5 种动态创建对象的方式: 
    1. Type.InvokeMember 
    2. ContructorInfo.Invoke 
    3. Activator.CreateInstance(Type) 
    4. Activator.CreateInstance(assemblyName, typeName) 
    5. Assembly.CreateInstance(typeName) 
    最快的是方式 3 ,与 Direct Create 的差异在一个数量级之内,约慢 7 倍的水平。其他方式,至少在 40 倍以上,最慢的是方式 4 ,要慢三个数量级。
      

  2.   

    可以 但是不完全把, 如果 loadFile 的时候, 就不能 单一用 activeator了吧,
      

  3.   

    用static将反射创建的实例缓存起来,不缓存当然效率低了。
    private static readonly IAdmin dal = DataAccess.CreateInstance<IAdmin>("AdminDal");
      

  4.   

    现在用的就是第3种方式来实例化对象的,会不会是因为被反射出来是一个Control对象,而且这个对象需要加载的子控件比较多,加上Load事件和show事件里执行的代码也挺多的~
      

  5.   

    这个有做的,我是对C#自带的反射进行了封装,有对创建的实例用static进行缓存~
      

  6.   

    http://www.cnblogs.com/slyzly/articles/2657937.html看看这个能不能解决,反射一般是要加上缓存的。
      

  7.   

    打个比方说,我通过反射创建了对象实例A,A是一个control或者form,A里面又包含了子控件A1,A2,A3,在实例化A的时候肯定也要把A1,A2,A3加载完的,这样子一来耗时就很是厉害啊~我用dottrace测试了下,整个反射过程消耗的时间占了大概70%~~