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排序也刚好是其他三种的一倍,和“理论值”几乎完全吻合。