static void SortWithLinq(int[] array) { var sorted = (from i in array orderby i select i).ToList(); }這里我使用的是ToList方法而不是ToArray方法來生成新序列,這是因為ToList的方法性能更高一些,我還是想盡可能將關注點放在“排序”而不是其他方面。
比較代碼如下:
static void Main(string[] args) { var random = new Random(DateTime.Now.Millisecond); var array = Enumerable.Repeat(0, 1000 * 500).Select(_ => random.Next()).ToArray();
SortWithDefaultComparer Time Elapsed: 7,662ms Gen 0: 49 Gen 1: 49 Gen 2: 49
SortWithCustomComparer Time Elapsed: 13,847ms Gen 0: 49 Gen 1: 49 Gen 2: 49
SortWithDelegate Time Elapsed: 19,625ms Gen 0: 49 Gen 1: 49 Gen 2: 49
SortWithLinq Time Elapsed: 31,785ms Gen 0: 99 Gen 1: 99 Gen 2: 99從結果上來,四種做法的性能區別還是非常明顯的:使用Comparer<int>.Default進行排序的耗時只有LINQ排序的1/4。有趣的是,從GC次數上來看,LINQ排序也剛好是其他三種的一倍,和“理論值”幾乎完全吻合。