再谈Activator.CreateInstance(Type type)方法创建对象和Expression Tree创建对象性能的比较(更新版)...
上次说了方法Activator.CreateInstance()创建对象和直接用表达式创建对象的性能比较。被老赵等大牛批评测试方法不对,我决定再测试一下,测试环境和第一次一样。
测试代码如下(其中Form1就是新建的一个WinForm,什么代码都没有写):
2 watch1.Start();
3 for (int i = 0; i < 10000; i++)
4 {
5 Form1 form1 = Activator.CreateInstance(typeof(Form1)) as Form1;
6 }
7
8 watch1.Stop();
9 Console.WriteLine("Activator.CreateInstance");
10 Console.WriteLine(watch1.Elapsed.ToString());
11
12 watch1.Reset();
13 watch1.Start();
14 for (int i = 0; i < 10000; i++)
15 {
16 Form form1 = GetCache.InstanceCacheEx.InstanceCache(typeof(Form1)) as Form1;
17 }
18 watch1.Stop();
19 Console.WriteLine("Expression.CreateInstanceEx");
20 Console.WriteLine(watch1.Elapsed.ToString());
而创建Expression Tree的代码如下:
2 {
3 private Dictionary<Type, Func<object>> dicEx = new Dictionary<Type, Func<object>>();
4 public object InstanceCache(Type key)
5 {
6
7 object value = null;
8
9 if (dicEx.TryGetValue(key, out value))
10 {
11 return value();
12 }
13 else
14 {
15 value = CreateInstance(key);
16 dicEx[key] = value;
17 return value();
18 }
19 }
20
21 static Func<object> CreateInstance(Type type)
22 {
23 NewExpression newExp = Expression.New(type);
24 Expression<Func<object>> lambdaExp = Expression.Lambda<Func<object>>(newExp, null);
25 Func<object> func = lambdaExp.Compile();
26 return func;
27 }
28 }
29
30 public static class GetCache
31 {
32 static GetCache()
33 {
34 InstanceCacheEx = new InstanceCachesEx();
35 }
36
37 public static InstanceCachesEx InstanceCacheEx { get; set; }
38 }
测试结果如下:
00:00:00.0140537
Expression.CreateInstanceEx:
00:00:00.7389382
吆呼,差了这么多......
我们换一个类来试试,来一个简单的类:
再来看看测试结果:
00:00:00.0020066
Expression.CreateInstance
00:00:00.0078841
嗯?结果方法Activator.CreateInstance()比表达式树要快了。
待续......
转载于:https://www.cnblogs.com/WillMeng/archive/2009/12/07/ExpressionTree-Activator-CreateInstance.html
再谈Activator.CreateInstance(Type type)方法创建对象和Expression Tree创建对象性能的比较(更新版)...相关推荐
- 再谈机器学习中的归一化方法(Normalization Method)
机器学习.数据挖掘工作中,数据前期准备.数据预处理过程.特征提取等几个步骤几乎要花费数据工程师一半的工作时间.同时,数据预处理的效果也直接影响了后续模型能否有效的工作.然而,目前的大部分学术研究主要集 ...
- 一起谈.NET技术,关于Expression Tree和IL Emit的所谓的quot;性能差别quot;
昨天写了<三种属性操作性能比较>,有个网友写信问我一个问题:从性能上看,Expression Tree和IL Emit孰优孰劣?虽然我在回信中作了简单的回答,但不知道这个网友是否懂我的意思 ...
- 关于Assembly.CreateInstance()与Activator.CreateInstance()方法
关于Assembly.CreateInstance()与Activator.CreateInstance()方法 动态创建类对象,大多是Activator.CreateInstance()和Activ ...
- createinstance.java_C# Activator.CreateInstance()方法使用
本文来自:http://blog.csdn.net/jaydawson/article/details/5539438 C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.Cr ...
- python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...
python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...
- python3运行报错:TypeError: Object of type ‘type‘ is not JSON serializable解决方法(详细)
python3运行报错:TypeError: Object of type 'type' is not JSON serializable解决方法(详细) 参考文章: (1)python3运行报错:T ...
- python中dtype什么意思_浅谈python 中的 type(), dtype(), astype()的区别
如下所示: 函数 说明 type() 返回数据结构类型(list.dict.numpy.ndarray 等) dtype() 返回数据元素的数据类型(int.float等) 备注:1)由于 list. ...
- 拉普拉斯算子属于卷积方法吗_2020 年 GNN 开卷有益与再谈图卷积
题记 2019 年,GNN 从来没有这样繁荣过.一方面,计算机视觉.自然语言处理等领域都忽如一夜春风来,反复"发现"了自身潜在的 Graph 结构,与 GNN 融合.另一方面,GN ...
- 报错:Parameter ‘XXX‘ implicitly has an ‘any‘ type.解决方法
报错:Parameter 'XXX' implicitly has an 'any' type.解决方法 tsconfig.json添加"noImplicitAny": false ...
- python dtype什么意思_浅谈python 中的 type(), dtype(), astype()的区别
如下所示: 函数 说明 type() 返回数据结构类型(list.dict.numpy.ndarray 等) dtype() 返回数据元素的数据类型(int.float等) 备注:1)由于 list. ...
最新文章
- RIFF格式声音文件的实现(转)
- java类中的代码块,Java开发避坑指南!
- 世卫组织总干事谭德塞:没有国家可以假装大流行已结束
- 7nmarm微架构鲲鹏服务器芯片,中国电信服务器集采:同方鲲鹏服务器拿下6000万元份额...
- 边缘计算时代来了,你准备好了吗?
- 作者:姚前(1970-),男,中国人民银行科技司教授级高级工程师
- ubuntu12.04 安装Android Studio笔记
- Android文件上传
- html5 判断页面加载,js判断页面是否加载完成的方法
- java 日期 yyyy_Java时间格式化时YYYY(大写)和yyyy(小写)的区别
- 开源掌机芯片方案对比
- LaMDA 是有感觉的吗?
- thinkbook15快捷键
- 第四回 还君明珠双泪垂,恨不相逢未嫁时
- Java IO Steam
- 友盟第三方QQ登录分享
- oracle新建一个自增列,sequence的使用
- 联想R720安装原装内存条图文过程
- 【音视频知识】MP4文件格式解析-详解
- php查询替换_如何在PHP中使用正则表达式进行查找替换
热门文章
- Unity Camera
- java memcached delete_Memcached删除/Delete数据
- javascript 面向对象的理解、数据属性的特征,基本数据类型、三大引用类型,方法
- Jxl实现Excel的导入与导出
- 文档对象模型(DOM)
- 设计模式,六大设计原则,类的特性
- Java 定时器 Timer 与 定时任务 TimeTask
- java 单词倒序_【Java】单词倒序输出
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_13-页面静态化-数据模型-轮播图DataUrl接口...
- FZU 2092 收集水晶 BFS记忆化搜索