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

通过反射或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吧,方便实用。

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。