dynamic做反射提升性能
来源:互联网 发布:日本游戏app软件 编辑:程序博客网 时间:2024/05/17 22:12
今天比较没有事情,突然想做个关于dyanmic对象和使用反射的性能比较,所以就做了个简单的测试。
第一中方法是传统的调用
第二种方法是使用daynamic对象
第三种方法是使用反射
分别调用List<>的Add方法1000000次,看看每种方法耗用的时间。
using System;using System.Collections.Generic;using System.Diagnostics;namespace ConsoleApplication2{ class Test { public string Name { get; set; } public int Aage { get; set; } } class Program { static void Main(string[] args) { //直接调用 var list = new List<Test>(); var sw = new Stopwatch(); sw.Start(); for (var i = 0; i < 1000000; i++) list.Add(new Test() { Name = "Test", Aage = i }); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); var type = typeof(List<>); var gType = type.MakeGenericType(typeof(Test)); //动态调用 dynamic dynamicObject = Activator.CreateInstance(gType); sw.Reset(); sw.Restart(); for (var i = 0; i < 1000000; i++) dynamicObject.Add(new Test() { Name = "Test", Aage = i }); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); //反射 var obj = Activator.CreateInstance(gType); var m = gType.GetMethod("Add"); sw.Reset(); sw.Restart(); for (var i = 0; i < 1000000; i++) m.Invoke(obj, new object[] { new Test() { Name = "Test", Aage = i } }); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); Console.ReadKey(); } }}
结果如下:
结果显示,相对于传统的方法,使用dynamic要慢3倍,使用反射要慢30倍
====================
0.codedom,将语言codedom文本,首次运行编译并生成dll,然后加载调用相当于js中的eval()1.反射和反射发送:在元数据中找,然后调用,反射缓存,延迟绑定(即调用时绑定)
2.调用:直接调用
3.动态,DLR
- dynamic做反射提升性能
- java反射如何提升性能
- dynamic-insert,dynamic-update能够性能上的少许提升
- dynamic和反射性能的简单比较
- 使用dynamic实现反射,并提交性能
- 使用表达式树提升反射性能
- [SQL Server] 合理选择游标类型(static,dynamic),提升性能
- 使用dynamic来简化反射实现,并且提高了性能。
- C#3.5新增的Expression来提升反射性能
- 提升性能
- 提升性能
- 提升性能
- C# 反射和dynamic
- 使用dynamic简化反射
- 对对象类型和调用方法属性进行存储以提升反射性能
- dynamic跟反射有关系?
- dynamic 与反射 效率比较
- Hibernate : dynamic-update dynamic-insert - 性能影响
- Ubuntu下root用户锁定屏幕(需要输入密码)
- 【C语言】开发工具--GCC使用入门
- 删除记录
- QImage类
- SqlServer 基础语法
- dynamic做反射提升性能
- 思考的形状 《思维导图》读后感
- could not find class
- EJB3.0多线程访问的同步问题
- 耳机的选择小心得
- VS2008 ATL控件调适IE网页的设置
- go语言之exec.Cmd
- ORA-00600: internal error code, arguments: [kmgs_parameter_update_timeout_1], [27069], [], [], [], [
- android控件Spinner(1)之简单使用