zoukankan      html  css  js  c++  java
  • 利用“通过'反射方式'创建的对象”来创建对象的性能问题?

    本来本文只是本人在百度知道上面的一个提问,但是由于百度知道太恶心了,半天没人给出合适答案,然后自己想回答问题,却发现字数居然限制那么死,所以把那个问题搬家到这里了。

    问题的意思包括两次创建对象:
    1、反射创建对象;
    2、利用反射创建的对象来创建对象;
    其中第二层次的创建对象可以又会有两种:
    a)、new的方式构造对象
    b)、反射创建对象
    请问在第二层次的new方式创建对象和直接用new方式(即跳过第一层反射操作)创建对象在性能上面又多大的差异?

    一直没能够等到我需要的答案,只有自己写代码测试了,测试方法还是采用傻瓜式1w,10w,100w,1000w,1ww执行,然后比较执行时间的方式。

    最后发现

    1、new一个对象是最快的;

    2、通过反射方式创建一个ObjectFactory,然后通过ObjectFactory来new一个Object的速度跟直接new的速度差不多;

    3、直接用反射的效率是最低的

     

    至于为什么呢,我在这里也给一个简单的个人见解:


    1、其实new的第一次速度也有些慢,但是经过第一次new操作后(dll的与该对象相关的信息都被加载到内存中了)所有new操作是最快的,因为每次都是从缓存中读取;

     2、反射创建对象,是每次都需要去读取dll文件的,然后解析dll文件创建对象,这里解析就是反射的意思

    3、先反射一个ObjectFactory对象,然后通过ObjectFactory方法创建对象,这个的效果跟第一种差不多,因为在反射创建ObjectFactory的时候,把要创建的对象的相关信息加载到内存中,然后从内存中读取dll信息,然后创建对象。

    上一张本人的测试结果图片

    ASP.NET开发技术交流群: 67511751(人员招募中...)

  • 相关阅读:
    .net core 操作域控 活动目录 ladp -- Support for System.DirectoryServices for Windows
    运行在 Android 系统上的完整 Linux -- Termux
    Windows Python 版本切换工具 --- Switch Python Version Tool For Windows
    简单的NLog配置文件
    python之set基本使用
    复习PHP的数组
    php动态修改配置文件
    制作一个php万年历
    一个简单的选项卡
    python操作文件的笔记
  • 原文地址:https://www.cnblogs.com/Juvy/p/2245579.html
Copyright © 2011-2022 走看看