当前位置: 移动技术网 > IT编程>开发语言>.net > .net反射与dynamic效率的简单比较

.net反射与dynamic效率的简单比较

2018年12月26日  | 移动技术网IT编程  | 我要评论

黄山旅游报价,斯内维尔的账本,个人趣向国语版

通过反射或dynamic,我们可以拿到object类对象属性的值,但他们的又有什么差别呢?我做了一下简单的比较:

 

using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;

namespace linqtestconsole
{
    class program
    {
        static void main(string[] args)
        {

            list lo = new list();
            for (int i = 0; i <1500000; i++) {
                object o = new { name = "name" + i, age = i };
                lo.add(o);
            }

            datetime dt10= datetime.now;
            //通过dynamic取值
            foreach(dynamic o in lo){

                string s = o.name + "的年龄是:" + o.age + "岁";
            }
            datetime dt11 = datetime.now;
            timespan span = dt11.subtract(dt10);
            console.writeline("用时"+ span.minutes + "分钟" + span.seconds + "秒"+span.milliseconds+"毫秒");

            //通过反射取值
            foreach (object o in lo)
            {
               string s=getpropertyvaluebyname("name", o).tostring() + "的年龄是:" + getpropertyvaluebyname("age", o).tostring() + "岁";
            }
            datetime dt22 = datetime.now;
            span = dt22.subtract(dt11);
            console.writeline("用时" + +span.minutes + "分钟" + span.seconds + "秒" + span.milliseconds + "毫秒");

            
            console.read();
        }


        /// 
        /// 反射,通过属性名称,取值
        /// 
        ///
        ///
        /// 
        public static object getpropertyvaluebyname(string propertyname, object o)
        {
            if (o == null)
            {
                o = new { };
            }
            //创建一个返回对象  
            object returnobject = new object();
            propertyinfo[] p1 = o.gettype().getproperties();
            foreach (propertyinfo pi in p1)
            {
                if (pi.name.tolower() == propertyname.tolower())
                {
                    returnobject = pi.getvalue(o);
                }
            }
            return returnobject;
        }  
    }
}


 

运行结果:

 

\

总结:

从上面可以看出,反射是有点慢的,以后还是尽量用dynamic吧,方便实用。

我比较的方式可能不是很正确,但是,这样的结果也在一定程度上反映了一些问题。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网