カスタム オブジェクトの Array.Sort と LINQ の並べ替えを比較する簡単なテスト アプリケーションを作成しました。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でソートする際にラムダ式のコードを貼り付けたのですが、付けても付けなくても同じです。(クラス Person は IComparable インターフェイスを実装します)