.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吧,方便实用。

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhifeiya/article/details/45032693

C#高级编程七十天----dynamic类型

dynamic类型 C#新增了dynamic关键字,正是因为这一个小小的关键字,C#像前迈进了一大步. dynamic是一个类型关键,声明为dynamic的类型与”静态类型”(这里的静态是指编译时...
  • shanyongxu
  • shanyongxu
  • 2015-08-05 13:48:02
  • 2558

dynamic跟反射有关系?

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

C#反射对象(C# Dynamic)

我觉的此方法是很有用的,尤其是你想把很多数据的对象读取到内存是,省你的很多时间和精力。 我用的时候是直接用泛型,然后就在一个getDataList()方法里就解析(反射)我的T对象,然后赋给从数据库...
  • ilyasjan
  • ilyasjan
  • 2014-11-25 16:06:49
  • 232

C# 反射性能比较

自己用,保存下来
  • zhaobao110
  • zhaobao110
  • 2015-11-19 18:06:37
  • 886

C#中使用反射的优缺点

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

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

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

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

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

C# 反射性能

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

.net 反射效率验证(转)

老赵的“反射”体验 复旦大学微软技术俱乐部 一、麻烦前的宁静:“老赵,嗯,帮忙测试一下这个方法。”唉,同伴传过来一个托管dll文件。唉,真麻烦啊,为什么不用CVS呢?用个VSS也好啊。老赵一边抱怨着一...
  • zheng_
  • zheng_
  • 2010-03-04 09:15:00
  • 3242

.Net4.0用表达式树构建委托改善反射性能

转自:  http://www.cnblogs.com/lemontea/archive/2013/02/04/2891281.html 最近搞一个系统时由于在比较关键地方用到反射了...
  • daonidedie
  • daonidedie
  • 2014-11-27 10:39:45
  • 867
收藏助手
不良信息举报
您举报文章:.net反射与dynamic效率的简单比较
举报原因:
原因补充:

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