我制作了快速测试应用程序,将 LINQ 排序与自定义对象上的 Array.Sort 进行比较。Array.Sort 似乎非常慢!
我制作了这样的自定义类:
class Person : IComparable<Person>
{
public int Age { get; set; }
public string Name { get; set; }
public int CompareTo(Person obj)
{
return this.Age.CompareTo(obj.Age);
}
public Person()
{ }
}
然后我在 main() 中做了我的测试人员:
string name = "Mr. Tomek";
Random r = new Random();
int size = 10000000;
DateTime start, end;
Person[] people1 = new Person[size];
Person[] people2 = new Person[size];
for (int i = 0; i < size; i++)
{
people1[i] = new Person();
people1[i].Age = r.Next(0, 10000);
people1[i].Name = name;
people2[i] = new Person();
people2[i].Age = people1[i].Age;
people2[i].Name = people1[i].Name;
}
之后,我测量了按 Array.Sort 和 LINQ 排序的时间:
start = DateTime.Now;
var sort = from s in people2
orderby s.Age
select s;
end = DateTime.Now;
Console.WriteLine("LINQ: ");
Console.WriteLine((end - start).TotalMilliseconds);
start = DateTime.Now;
Array.Sort(people1,((Person p1, Person p2)=>{return p1.CompareTo(p2);}));
end = DateTime.Now;
Console.WriteLine("IComparable: ");
Console.WriteLine((end - start).TotalMilliseconds);
Console.ReadLine();
Linq 时间:大约 1 或 2 毫秒
Array.Sort:超过 16秒!
所有数组都已排序(LINQ 生成新集合,原始数组未排序),但 Array.Sort 非常慢!怎么解释?(在 DEBUG 和 RELEASE 模式下 Array.Sort 极度失败)
我在使用 Array.Sort 排序时粘贴了带有 lambda 表达式的代码,但无论有没有它都是一样的。(类 Person 实现 IComparable 接口)