Welcome

首页 / 软件开发 / 数据结构与算法 / 数组排序方法的性能比较(5):对象大小与排序性能

数组排序方法的性能比较(5):对象大小与排序性能2011-09-30 博客园 Jeffrey Zhao在我公开测试结果之后,有朋友也进行了其他测试。在测试中我使用的是int数组,经过分析之后我们 了解到Array.Sort<T>对于int数组有特殊的优化。于是,某些朋友使用了一些引用类型的数组进行 排序,得到Array.Sort<T>方法的性能落后于LINQ排序——虽然由于测试方式的问题,这个结果和 结论都不太妥当。不过在讨论的过程中,我们都意识到了一个问题:在其他条件不变的情况下,引用类型 的字段越多,Array.Sort<T>方法所需时间就越久。这次我们就来讨论一下这个问题。

性能测试

为了体现字段数量和排序时间的相关性,我们首先来构造一个方法,它可以使用Emit生成包含一定数 量的字段:

public abstract class TypeBase
{
public int ID;
}

class Program
{
public static ModuleBuilder moduleBuilder = null;

static Program()
{
var assemblyName = new AssemblyName { Name = "SomeAssembly" };

var domain = Thread.GetDomain();
var asmBuilder = domain.DefineDynamicAssembly(
assemblyName, AssemblyBuilderAccess.Run);

moduleBuilder = asmBuilder.DefineDynamicModule("SomeModule");
}

static Type CreateType(int numberOfField)
{
var typeName = "TypeWith$" + numberOfField + "$Fields";
var typeBuilder = moduleBuilder.DefineType(
typeName, TypeAttributes.Class, typeof(TypeBase));

for (int i = 0; i < numberOfField; i++)
{
typeBuilder.DefineField("Field$" + i, typeof(int), FieldAttributes.Public);
}

return typeBuilder.CreateType();
}
}