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

原创 2015年04月13日 21:52:42

    CSDN广告是越来越多了,所有博客笔记不再更新,新网址 DotNet笔记

通过反射或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<Object> lo = new List<object>();
            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();
        }


        /// <summary>
        /// 反射,通过属性名称,取值
        /// </summary>
        /// <param name="PropertyName"></param>
        /// <param name="o"></param>
        /// <returns></returns>
        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吧,方便实用。

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

建议15: 使用dynamic来简化反射实现

建议15: 使用dynamic来简化反射实现 dynamic是Framework 4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译器默认d...
  • houwc
  • houwc
  • 2016年08月31日 10:51
  • 433

C# 反射性能比较

自己用,保存下来
  • zhaobao110
  • zhaobao110
  • 2015年11月19日 18:06
  • 710

C#中几种反射机制的比较

1. 前言         反射是一项很有趣的技术,她提供了另一个视角来模糊、统一地看待我们用代码搭建起来的小世界。由于之前工作的关系,小鱼酱曾用C++初略地实现过一套反射系统,用来支持游戏中属...
  • llgood806
  • llgood806
  • 2015年02月20日 22:02
  • 648

.net的反射技术(2)深究及 性能比较

FastReflection Library  老赵编写 全文英文版:FastReflection Library 这是我在CodePlex上创建的一个项目,它的网址是http://www....
  • brokge
  • brokge
  • 2012年10月11日 09:01
  • 7427

dynamic跟反射有关系?

陆敏技的《编写高质量代码 改善C#程序的157个建议》书中建议15  使用dynamic来简化发射实现,看后很是不解   ,原文如下 —————————————————————————————————...
  • dongchao018
  • dongchao018
  • 2013年10月19日 17:55
  • 854

C# 反射性能

C# 创建对象可以直接用new,也可以用反射,下面测试一下反射创建的性能如何, 这里可以比较一下,构造方法带参数和不带参数的区别。 先创建一个测试类,分为构造函数带参数和不带参数,两种情况来测试 ...
  • The_Eyes
  • The_Eyes
  • 2017年06月12日 21:22
  • 313

C#中使用反射的优缺点

优点:             反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类;   缺点:            1、性能问题:使...
  • SpringFileld
  • SpringFileld
  • 2014年01月01日 12:30
  • 3464

.Net4.0 Dynamic 使用

List dyList = new List(); PropertyInfo[] peroperties = typeof(PersonalEventEntity).GetProperties(Bi...
  • soarheaven
  • soarheaven
  • 2011年12月15日 15:37
  • 2671

.net dynamic动态加属性

class Test : System.Dynamic.DynamicObject { public override bool TryGetMember(Sy...
  • cqims21
  • cqims21
  • 2013年12月27日 16:10
  • 3857

手把手教你如何创建 ASP.NET Dynamic Data 实体网站

创建ASP.NET Dynamic Data 实体网站
  • Kenny_cn
  • Kenny_cn
  • 2016年08月24日 15:59
  • 2818
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.net反射与dynamic效率的简单比较
举报原因:
原因补充:

(最多只允许输入30个字)