.Net中各种不同的对象创建方式的速度差异
在.Net中,微软给我们提供了很多不同的创建对象实例的方法,它们的速度又各有不同,以下一一列举。
使用new关键字
这在.Net中是最常见,也是速度最快的方式:
1 var instance = new Class();
使用System.Activator类的CreateInstance方法动态创建
这里的CreateInstance指的是Activator的非泛型方法:
1 var instance = System.Activator.CreateInstance(typeof(Class));
使用System.Activator类的CreateInstance<T>方法动态创建
这里的CreateInstance才是Activator的泛型方法:
1 var instance = System.Activator.CreateInstance<Class>();
使用泛型约束,使用new关键字创建对象(泛型方法)
首先需要创建一个泛型的方法:
1 public static T CreateInstance<T>() where T : new()2 {3 return new T();4 }
这里利用泛型约束where T: new(),保证了T类型是可以用无参构造器构造的,所以代码里面就可以直接使用new T()来创建对象:
1 var instance = CreateInstance<Class>();
使用泛型类的静态方法、泛型约束和new关键字创建
这里需要首先创建一个泛型类
1 public static class StaticInitializer<T> where T:new()2 {3 public static T CreateInstance()4 {5 return new T();6 }7 }
然后使用如下代码创建实例:
1 var instance = StaticInitializer<Class>.CreateInstance();
使用泛型类的动态方法、泛型约束和new关键字
这里使用的是泛型类的实力方法,需要首先创建一个泛型类:
1 public class DynamicInitializer<T> where T:new()2 {3 public T CreateInstance()4 {5 return new T();6 }7 }
使用的方法就是:
1 var initializer = new DynamicInitializer<Class>();2 var instance = initializer.CreateInstance();
Ok,现在我一共提出了6种不同的创建对象的方式,大家可以猜猜这些创建对象的方式当中那个会比较快。
- 使用new关键字
- 使用System.Activator类的CreateInstance方法动态创建
- 使用System.Activator类的CreateInstance<T>方法动态创建
- 使用泛型约束,使用new关键字创建对象(泛型方法)
- 使用泛型类的静态方法、泛型约束和new关键字创建
- 使用泛型类的动态方法、泛型约束和new关键字
.Net中各种不同的对象创建方式的速度差异的更多相关文章
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...
- 【20190220】JavaScript-知识点整理:对象创建方式、原型、闭包
一.对象创建方式 1. 工厂模式 这种模式抽象了创建具体对象的过程,用函数来封装以特定接口创建对象的细节.存在的问题是无法通过 instanceof 识别一个对象的类型. function creat ...
- 第163天:js面向对象-对象创建方式总结
面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. var obj = {}; //对象有自己的 属性 和 行 ...
- Android中得到布局文件对象有三种方式
Android中得到布局文件对象有三种方式 第一种,通过Activity对象 View view = Activity对象.getLayoutInflater().inflater(R.layout. ...
- javascript对象创建方式
工厂模式 在ECMAscript中无法创建类,所以开发人员就发明了一种函数,用函数来封装,以特定接口创建对象的细节,如下面的例子所示: function createPerson(name,age,j ...
- Java中String两种不同创建方式的区别及intern的用法
一, Java有两种创建字符串的方式, String str1 = "abc"; String str2 = new String("abc"); 用双引号创建 ...
- Java中类加载过程和对象创建过程
类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在.如果有,就直接使用:如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加 ...
- java中多线程的两种创建方式
一丶继承Thread类实现多线程 第一步:继承Thread类第二步:重写run()方法第三步:创建继承了Thread类的对象 , 调用start()方法启动. //线程创建方式一 : /* 第一步:继 ...
- JS中遍历数组、对象的方式
1.标准的for循环遍历数组 //不打印自定义属性和继承属性 var array = [1,2,3]; for (var i = 0; i < array.length; i++) { cons ...
随机推荐
- 用shell脚本新建shell文件并自动生成头说明信息
目标: 新建文件后,直接给文件写入下图信息 代码实现: [root@localhost test]# vi AutoHead.sh #!/bin/bash#此程序的功能是新建shell文件并自动生成头 ...
- Vue的条件渲染
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 【MVC】会员注册/登录,普通验证,会员名是否注册Ajax验证以及会员邮件验证实现原理
using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentM ...
- Java IO编程全解(一)——Java的I/O演进之路
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7419117.html JDK1.4之前的早期版本,Java对I/O的支持并不完善,开发人员在开发高性能I/O ...
- Django安装Xadmin步骤
在Django中安装Xadmin替换原始的admin,下面介绍两种方法安装 第一种方法:pip安装 第一步: 直接pip安装xadmin pip install xadmin pip会同时安装上面三个 ...
- WiFi网络WPA2 KRACK漏洞分析报告
作者:东帆@阿里安全技术平台团队 -------- 0x00 漏洞概述 安全研究员Mathy Vanhoef发现的WPA2协议的KRA(Key Reinstallation Attacks)漏洞, ...
- CVPixelBuffer的创建 数据填充 以及数据读取
CVPixelBuffer的创建数据填充以及数据读取 CVPixelBuffer 在音视频编解码以及图像处理过程中应用广泛,有时需要读取内部数据,很少的时候需要自行创建并填充数据,下面简单叙述. 创建 ...
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 1
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703679.html ------------------------------------ ...
- uva242,Stamps and Envelope Size
这题紫薯上翻译错了 应该是:如果有多个并列,输出邮票种类最少的那个,如果还有并列,输出最大面值最小的那个 坑了我一个下午 dp[p][q]==1表示可以用不超过q张组成面额p 结合记忆化,p从1开始枚 ...
- C#匹配标签正则,获取标签的值
比如要获取: <color=#50cccc>头盔坐标:(-0.6, 1.0, 1.2)</color><color=#3d85c6>头盔方向(-0.2, 0.1, ...