Juvy

I Believe Persistence.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

问题的意思包括两次创建对象:
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(人员招募中...)

 

posted on 2011-11-11 13:41  Juvy  阅读(1945)  评论(2编辑  收藏  举报
QQ:1054930154; Email:david.telvent@gmail.com; QQ群:67511751