一起谈.NET技术,.NET4.0 之 Dynamic VS Reflection 效率

  在我先前的文章中,不断的推广.NET4.0新特性。特别是.NET4.0 Dynamic 这个新特性。随之而来的问题也出现了—Dynamic 执行效率如何?

  我们做开发的不光需要代码简洁,能够希望自己能够写出好的架构。还有一点非常重要的就是,我们的写出来的代码效率。撇开Dynamic在.net4.0中的实现原理。本篇只考虑dynamic 的效率比起使用反射到底是快还是慢?难道.NET为引入了dynamic这个新鲜事物降低了我们的程序效率?有网友指出评论一个特性或者方法的效率如何,唯一的判定标准就是实测

切入主题,按照以下代码,来结束你对dynamic的效率怀疑吧!!!

  1、新建测试类:

public class TestClass
{
public string TestProperty { get; set; }
}

  2、控制台程序进行效率测试代码:

static void Main(string[] args)
{
int times = 1000000;

string value = "Dynamic VS Reflection";

//reflection 测试开始
TestClass testTypeByReflection = new TestClass();
Stopwatch watch1
= Stopwatch.StartNew();
var property
= typeof(TestClass).GetProperty("TestProperty");
for (var i = 0; i < times; i++)
{
property.SetValue(testTypeByReflection, value,
null);
}
Console.WriteLine(
string.Format("Reflection耗时:{0} 毫秒", watch1.ElapsedMilliseconds));


//dynamic 测试开始
Stopwatch watch2 = Stopwatch.StartNew();
dynamic testTypeByDynamic
= new TestClass();
for (int i = 0; i < times; i++)
{
testTypeByDynamic.TestProperty
= value;
}
Console.WriteLine(
string.Format("Dynamic耗时:{0} 毫秒", watch2.ElapsedMilliseconds));

Console.ReadLine();
}

  3、测试TestClass类,开始 dynamic VS reflection 测试结果如下

  怎样,dynamic 比起reflection 够快吧?!

  最后希望本篇文章可以给您带来帮助,如有不足之处欢迎指出,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arm-none-eabi-gcc 嵌入式交叉编译器安装 极简教程

1、下载arm-none-eabi-gcc win10 官网下载&#xff1a;https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads我的FTP&#xff1a;arm-none-eabo-gcc 2、解压 3、添加环境变量 4、CMD运行 安装完毕&#xff0c…

vscode openOCD 配置Jlink 下载和调试STM32 教程

1、修改openOCD 的配置文件jlink.cfg 由于手头上的jlink 是swd接口&#xff0c;需要将openOCD的jlink.cfg修改&#xff0c;指定接口类型为swd。这里直接复制一份&#xff0c;然后修改&#xff0c;jlink-swd.cfg内容如下&#xff1a; adapter driver jlink transport select s…

Ansi、Unicode、UTF8字符串之间的转换和写入文本文件

转载请注明出处http://www.cppblog.com/greatws/archive/2008/08/31/60546.html 最近有人问我关于这个的问题&#xff0c;就此写一篇blog Ansi字符串我们最熟悉&#xff0c;英文占一个字节&#xff0c;汉字2个字节&#xff0c;以一个\0结尾&#xff0c;常用于txt文本文件 Uni…

小女也爱c#(3)--俄罗斯方块练习数组

学完c了&#xff0c;总算是有点收获了&#xff0c;自己写了个俄罗斯方块练习数组&#xff0c;在vc6.0控制台环境下编译通过. makehead.h int Makepanel(char Ary_Panel[][10]);void gotoxy(int x, int y);void BrushsScreen(char ary[][20]);int initializationShape();void Sh…

放松时刻——C#分割字符串

让我们来练习一下字符串的分割~把话倒过来说&#xff1a; private void change_button_Click(object sender, EventArgs e) {var after_text before_TextBox.Text?.Select(x>x.ToString()).ToArray();string result "";for (int i after_text.Length - 1; i &…

使用WCF建立起Silverlight客户端与服务端的桥梁

最近正在开发一个项目&#xff0c;需要应用到Silverlight以及数据库。在正式开工之前需要掌握将数据从服务端送到客户端的技术&#xff0c;我们采用建立WCF服务的方法。 “做中学”是最好的学习方法&#xff0c;真正实践之后学习者将会有更多的自信和把握&#xff0c;这种感觉将…

如何用脚本可靠关闭一个linux服务或进程

一、脚本样例 以quectel的EC20模组关闭ppp拨号服务脚本为例&#xff0c;以下为脚本源码&#xff1a; #!/bin/sh timeout5 killall -15 pppd sleep 1 killall -0 pppd while [ $? -eq 0 ] dotimeoutexpr $timeout - 1if [ $timeout -eq 0 ]thenexit 1fisleep 1killall -0 ppp…

vscode 新建python 终端

ctrlshiftp 输入python&#xff0c; 选择Python:创建终端

STMF4x 固件库V1.25.0

https://www.st.com/en/embedded-software/stm32cubef4.html

初读CLR Via C# 之 IL、CTS、CLS

本章将对CLR中的IL、CTS和CLS进行一个大概的总结。下章将开始第二章的内容。 IL我们称之为高级汇编语言或者中间语言&#xff0c;在我们编写基于.NET框架下的程序&#xff08;不论是C#、VB或者J#等&#xff09;在被编译成本地CPU指令前&#xff0c;都将被编译成IL语言&#xff…

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV 2023/12/22 7:54 简略步骤&#xff1a;rootrootrootroot-X99-Turbo:~/3TB$ cat Android11.0.tar.bz2.a* > Android11.0.tar.bz2 rootrootrootroot-X99-Turbo:~/3TB$ tar jxvf Android11.0.tar.…

KEIL5 编译器导致的程序异常

STM32F407写程序过程中发现了一个KEIL5 ARM编译器导致的BUG&#xff0c;记录如下。 源代码比较简单&#xff0c;分别打印两个标志量的值&#xff0c;采用了volatile 声明&#xff0c;避免被优化。 代码功能不用多说&#xff0c;看一下输出结果&#xff1a; 两个标志量都被编译…

STM32F407控制AD7606 采用HAL库的TIM和SPI

前言 本文介绍基于STM32F407的AD7606 8通道同步采集控制方式&#xff0c;总体思路&#xff1a;PWM驱动AD7606完成模数转换&#xff0c;AD7606转换完成后其BUSY引脚给出下降沿&#xff0c;STM32捕获外部中断并在中断服务程序中调用SPI串口读取AD7606数据&#xff0c;工程采用cu…

(转)二分图最大匹配的König定理及其证明

出处:http://www.matrix67.com/blog/archives/116 二分图最大匹配的Knig定理及其证明 如果你看不清楚第二个字母&#xff0c;下面有一个大号字体版本&#xff1a;二分图最大匹配的Knig定理及其证明 本文将是这一系列里最短的一篇&#xff0c;因为我只打算把Knig定理证了&…

如何使用struts2对集合参数进行验证

上一节介绍了struts2可以支持批量表单参数提交&#xff0c;那么提交到后台时如何利用strust2的validation框架对这个集合做验证&#xff1f; struts2提供了一个vistor校验器&#xff0c;可以实现这个需求 还是采用上一节中批量添加书籍的例子 1.jsp文件 <% taglib prefix&qu…

[Axure教程]0001.新手入门基础

Axure RP是一个专业的快速原型设计工具。Axure&#xff08;发音&#xff1a;Ack-sure&#xff09;&#xff0c;代表美国Axure公司&#xff1b;RP则是Rapid Prototyping&#xff08;快速原型&#xff09;的缩写。Axure RP已被一些大公司采用。Axure RP的使用者主要包括商业分析师…