.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();
}
}

然后使用如下代码创建实例:

var instance = StaticInitializer<Class>.CreateInstance();

使用泛型类的动态方法、泛型约束和new关键字

这里使用的是泛型类的实力方法,需要首先创建一个泛型类:

public class DynamicInitializer<T> where T:new()
{
public T CreateInstance()
{
return new T();
}
}

使用的方法就是:

var initializer = new DynamicInitializer<Class>();
var instance = initializer.CreateInstance();

测试内容:

创建100万个对象。

测试方式:


for(var i = 0; i < 1000000; i++)
// create the instance

 

然后计算这段代码消耗的时间

测试结果:

  1. 使用new关键字 17ms
  2. 使用System.Activator类的CreateInstance方法动态创建 484ms
  3. 使用System.Activator类的CreateInstance<T>方法动态创建 1545ms
  4. 使用泛型约束,使用new关键字创建对象(泛型方法)1604ms
  5. 使用泛型类的静态方法、泛型约束和new关键字创建 1504ms
  6. 使用泛型类的动态方法、泛型约束和new关键字 1481ms

这里使用new关键字无疑是最快的,比较有趣的主要有以下2点:

  1. 使用System.Activator的非泛型方法比使用泛型方法快很多(超过200%)
  2. 使用泛型约束和new关键字创建的速度几乎和System.Activator的泛型方法的一样
原创粉丝点击