.net反射与dynamic效率的简单比较
程序员文章站
2022-08-10 20:50:27
通过反射或dynamic,我们可以拿到object类对象属性的值,但他们的又有什么差别呢?我做了一下简单的比较:
using system;
using system.colle...
通过反射或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吧,方便实用。
我比较的方式可能不是很正确,但是,这样的结果也在一定程度上反映了一些问题。
下一篇: 5分钟编写一个博客(使用ASP技术)