Я сделал приложение для быстрого тестирования, чтобы сравнить сортировку 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 SECONDS!
Все массивы отсортированы (LINQ создает новую коллекцию и оставляет несогласованный массив oryginal), но Array.Sort очень медленный! Как это можно объяснить? (в режиме DEBUG и RELEASE Array.Sort не работает)
Я приклеил код с выражением лямбда при сортировке с Array.Sort, но это то же самое с и без него. (Class Person реализует интерфейс IComparable)