性能报告——反射创建对象

代码
        public void testperformance()
        {
            
string assembly = "Pixysoft.Framework.Noebe.Orm";
            
string type = "Pixysoft.Framework.Noebe.Orm.testdriven.Pojo";

            CodeTimer.Initialize();

            CodeTimer.Time(
"reflection"100000delegate
            {
                Type _type 
= Assembly.Load(assembly).GetType(type);
                Object obj 
= Activator.CreateInstance(_type);
            });

            CodeTimer.Time(
"direct"100000delegate
            {
                Object obj 
= new Pojo();
            });

            CodeTimer.Time(
"dynamic"100000delegate
            {
                Type _type 
= Assembly.Load(assembly).GetType(type);
                Object obj 
= ReflectionManager.CreateDynamicType(_type).GetDefaultConstructor().Invoke();
            });
        }

 

 

 

 

------ Test started: Assembly: Pixysoft.Framework.Noebe.Orm.dll ------


reflection

Time Elapsed: 2,422ms

CPU time: 2,421,875,000ns

Gen 0: 19

Gen 1: 0

Gen 2: 0


direct

Time Elapsed: 1ms

CPU time: 0ns

Gen 0: 1

Gen 1: 0

Gen 2: 0


dynamic

Time Elapsed: 2,726ms

CPU time: 2,718,750,000ns

Gen 0: 91

Gen 1: 0

Gen 2: 0



1 passed, 0 failed, 0 skipped, took 5.41 seconds (Ad hoc).



结论:

1. 反射创建对象的开销基本上可以忽略了。

2. 自己使用动态等方法创建对象并没有很大提高性能。

3. 反射创建对象的唯一难点在 参考插件里面出现的问题:加载搜索+多dll版本内存重复。 

 

posted @ 2010-07-27 17:16    阅读(571)  评论(0编辑  收藏  举报
IT民工