.Net中各种不同的对象创建方式的速度差异
来源:互联网 发布:行知私塾 编辑:程序博客网 时间:2024/06/05 17:15
在.Net中,微软给我们提供了很多不同的创建对象实例的方法,它们的速度又各有不同,以下一一列举。
使用new关键字
这在.Net中是最常见,也是速度最快的方式:
var instance = new Class();
使用System.Activator类的CreateInstance方法动态创建 这里的CreateInstance指的是Activator的非泛型方法:
var instance = System.Activator.CreateInstance(typeof(Class));
使用System.Activator类的CreateInstance<T>方法动态创建
这里的CreateInstance才是Activator的泛型方法:
var instance = System.Activator.CreateInstance<Class>();
使用泛型约束,使用new关键字创建对象(泛型方法)
首先需要创建一个泛型的方法:
public static T CreateInstance<T>() where T : new()
{
{
return new T();
}
}
这里利用泛型约束where T: new(),保证了T类型是可以用无参构造器构造的,所以代码里面就可以直接使用new T()来创建对象:
var instance = CreateInstance<Class>();
用泛型类的静态方法、泛型约束和new关键字创建
这里需要首先创建一个泛型类
public static class StaticInitializer<T> where T:new()
{
public static T CreateInstance()
{
return new T();
}
}
{
public static T CreateInstance()
{
return new T();
}
}
然后使用如下代码创建实例:
var instance = StaticInitializer<Class>.CreateInstance();
使用泛型类的动态方法、泛型约束和new关键字
这里使用的是泛型类的实力方法,需要首先创建一个泛型类:
public class DynamicInitializer<T> where T:new()
{
public T CreateInstance()
{
return new T();
}
}
{
public T CreateInstance()
{
return new T();
}
}
使用的方法就是:
var initializer = new DynamicInitializer<Class>();
var instance = initializer.CreateInstance();
var instance = initializer.CreateInstance();
测试内容:
创建100万个对象。
测试方式:
for(var i = 0; i < 1000000; i++)
// create the instance
// create the instance
然后计算这段代码消耗的时间
测试结果:
- 使用new关键字 17ms
- 使用System.Activator类的CreateInstance方法动态创建 484ms
- 使用System.Activator类的CreateInstance<T>方法动态创建 1545ms
- 使用泛型约束,使用new关键字创建对象(泛型方法)1604ms
- 使用泛型类的静态方法、泛型约束和new关键字创建 1504ms
- 使用泛型类的动态方法、泛型约束和new关键字 1481ms
这里使用new关键字无疑是最快的,比较有趣的主要有以下2点:
- 使用System.Activator的非泛型方法比使用泛型方法快很多(超过200%)
- 使用泛型约束和new关键字创建的速度几乎和System.Activator的泛型方法的一样
- Net中各种不同的对象创建方式的速度差异
- .Net中各种不同的对象创建方式的速度差异
- 二叉树四种遍历方式的速度差异
- Spring中Oracle中各种不同的连接方式
- Javascript中创建对象的各种模式
- 创建类的对象的两种不同方式
- Java创建对象的方式和C++有什么不同
- 不同数据库中substring的差异
- 不同浏览器中使用 的差异
- 不同浏览器的差异
- Java中创建对象的方式
- JavaScript中创建对象的方式
- javascript中创建对象的方式
- JS中创建对象的方式
- 创建Class对象的4中方式
- JavaScript中对象的创建方式
- JS中创建对象的方式
- Java中对象的创建方式
- 利用com组件读取jpg格式图片
- wfstream写入unicode字符串很多陷阱
- 安装OpenStack-dashboard
- 革命性媒体:推荐十款优秀开源免费微博建站程序
- gdb入门知识
- .Net中各种不同的对象创建方式的速度差异
- Android中判断有无可用网络(是否是3G或者WIFI网络)
- jquery的验证插件jquery.validate.js使用总结
- 240多个jQuery插件
- 缺陷跟踪的两个经典分析模型---转帖
- 在DELPHI里面控制Edit中只能输入数字
- 判断素数
- 从iPhoneApplication中打开App Store的方法
- 关于解压 tar.gz的问题