本来本文只是本人在百度知道上面的一个提问,但是由于百度知道太恶心了,半天没人给出合适答案,然后自己想回答问题,却发现字数居然限制那么死,所以把那个问题搬家到这里了。
问题的意思包括两次创建对象:
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(人员招募中...)