使用dynamic来简化反射实现,并且提高了性能。

本人转载:http://www.cnblogs.com/cuitsl/archive/2012/01/06/2314636.html

与反射的比较
首先能看到的是,dynamic与反射相比,执行相同操作所需的代码少的多。
如调用类Me中的GetName()方法。

class Me
{
    public string Blog { get; set; }

    public string GetName()
    {
        return"Zhenxing Zhou";
    }
}

用反射调用GetName()方法:

Assembly a = Assembly.GetExecutingAssembly();
object instance= a.CreateInstance("Xianfen.Net.TestDynamic.Me");
Type type = instance.GetType();
MethodInfo mi = type.GetMethod("GetName");
object result= mi.Invoke(instance,null);

同样的dynamic调用:

dynamic myInfo =new Me();

string result= myInfo.GetName();

 

下面先举一个不用dynamic来实现反射的例子

 

class Program    {static void Main(string[] args)        {            DynamicSample dynamicSample = new DynamicSample();//通过反射得到DynamicSample的方法            var add = dynamicSample.GetType().GetMethod("Add");            Stopwatch watch = new Stopwatch();            watch.Start();for (int i = 0; i < 100000; i++)            {int re = (int)add.Invoke(dynamicSample, new object[] { 1, 2 });            }            watch.Stop();            Console.WriteLine(watch.ElapsedMilliseconds);//200毫秒左右            Console.Read();        }    }public class DynamicSample    {public string Name { get; set; }public int Add(int a, int b)        {return a + b;        }    }

试过几次,耗时基本在200毫秒左右,然后我们用dynamic来实现反射,看看性能如何

class Program    {static void Main(string[] args)        {            dynamic dynamicSample = new DynamicSample();            Stopwatch watch = new Stopwatch();            watch.Start();for (int i = 0; i < 100000; i++)            {int re = dynamicSample.Add(1, 2);            }            watch.Stop();            Console.WriteLine(watch.ElapsedMilliseconds);//50毫秒左右            Console.Read();        }    }public class DynamicSample    {public string Name { get; set; }public int Add(int a, int b)        {return a + b;        }    }

 

不仅代码变少了, 而且性能也提高了一个数量级,所有,大家能用动态属性实现反射的情况下建议都用动态属性来试下!

时间: 2024-10-01 05:42:10

使用dynamic来简化反射实现,并且提高了性能。的相关文章

编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]

原文:编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串.实现浅拷贝和深拷贝.用dynamic来优化反射] 前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议13.为类型输出格式化字符串 建议14.正确实现浅拷贝和深拷贝 建议15.使用dynamic来简化反射实现 建议13.为类型输出格式化字符串   有两种方法可以为类型提供格式化的字符串输出. 一种是意识到类型会产生格式化字符串输出,于是

提高ADO性能的优秀经验(转)

ado|性能 一.概述 "性能"这一术语有着几种不同的.差异微妙的含义.当人们谈到某个东西性能多少好时,他们想要表达的意思可能就是在一定的时间之内它完成了多少工作.例如,一个性能好的发动机运行起来更稳定,产生的动力更强大.对于开发小组,你同样也可能应用这个判断标准:一个性能好的开发小组工作时比较安静,而且能够生产出大量高质量的代码.对我来说,性能至少意味着两件事情--我的代码运行起来有多好,我的开发小组和我本人工作效率怎么样.无论哪一方面,本文介绍的技巧都将起到一定的帮助作用:帮助你更

提高网站性能中内容有关的10条原则

英文地址:http://developer.yahoo.com/performance/rules.html Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客并在各种会议上参与探讨.最佳实践的核心就是旨在提高网站性能. Excetional Performance团队总结出了一系列可以提高网站速度的方法.可以分为7大类34条.包括内容.服务器.cookie.CSS.JavaScript.

提高ADO性能的优秀经验

ado|性能 一.概述 "性能"这一术语有着几种不同的.差异微妙的含义.当人们谈到某个东西性能多少好时,他们想要表达的意思可能就是在一定的时间之内它完成了多少工作.例如,一个性能好的发动机运行起来更稳定,产生的动力更强大.对于开发小组,你同样也可能应用这个判断标准:一个性能好的开发小组工作时比较安静,而且能够生产出大量高质量的代码.对我来说,性能至少意味着两件事情--我的代码运行起来有多好,我的开发小组和我本人工作效率怎么样.无论哪一方面,本文介绍的技巧都将起到一定的帮助作用:帮助你更

网站分析:通过本地托管ga.js文件提高网页性能

中介交易 SEO诊断 淘宝客 云主机 技术大厅 Google Anlytics 分析代码是异步加载的,一般来讲不会影响网页性能,但是技术部的网页性能报告里老是提到ga.js的状态为Aborted,说明ga虽然是异步跟踪,但某些情况下对网页性能与加载时间确实存在影响.Google分析代码到底会不会影响网页性能?本地托管ga.js是否可行?本文提供本地服务器托管ga.js的基本思路与实现方法. Google Anlytics 分析代码是异步加载的,一般来讲不会影响网页性能,但是技术部的网页性能报告里

nginx中session ticket重用Session提高https性能分析

原创文章:来自nginx中session ticket重用Session提高https性能分析 https会话建立初次使用session ticket的SSL握手流程如下: Client Server ClientHello (empty SessionTicket extension)--------> ServerHello (empty SessionTicket extension) Certificate* ServerKeyExchange* CertificateRequest*

如何使用基于容器的虚拟化提高效率性能

本文讲的是如何使用基于容器的虚拟化提高效率性能[IT168云计算]如果你不介意只使用一种操作系统的话,那么和传统的hypervisor相比,基于容器的虚拟化能够提供更高的效率与性能. 基于容器的虚拟化使用单个内核运行一个操作系统的多个实例.每个实例在一个完全隔离的环境中运行,因此不存在一个容器访问另一个容器中文件这样的风险.因此,基于容器的虚拟化是安全的. 而且这种虚拟化方式的资源使用效率也是非常高的,因为所有的容器都运行在同一个内核上.但是这种方式同样存在弊端:只有一个内核意味着无法选择其他的

提高代码性能技巧谈—以创建千行表格为例

创建|技巧|性能 微软的开发周期中很重要的一块是调整产品的性能.性能调整也是开发者应当留心的关键部分之一. 经过多年发展,业界对于如何优化Win32程序性能已经有非常多的了解. 现在开发者遇到的问题之一是不太清楚是什么导致DTHML和HTML页面运行快或者慢.当然,有一些很简单的方法--比如不要使用2MB大的图片.我们曾经使用过另外一些有趣的技巧提高了DHTML页面的性能,希望它们能帮助你改善自己的页面性能. 这里我使用了一个建立Table的程序例子.其中用document.createElem

提高ASP性能的22个技巧(二)

技巧|性能 技巧12:将常用数据复制到脚本变量中  当访问ASP中的COM对象时,应该将常用对象数据复制到脚本变量中.着将减少COM方法调用.而COM方法调用代价相对比访问脚本数据更高.当访问Collection和 Dictonary对象时,这项技术也能消减高昂的查询代价.  通常,当准备不止一次访问一个对象数据时,应该将这个数据放当一个脚本对象中. 这项优化的主要目标是Request变量(Form和QueryString变量).例如,你的站点传递一个叫UserID的QueryString变量,