[Đố vui] So sánh hàm Sort và OrderBy
Lâu rồi mình mới lập topic, hôm nay tổ chức đố vui vậy
Câu đố như sau: Mình có đoạn code so sánh hiệu năng giữa hàm Sort và Orderby như sau. (Cái code không quan trọng lắm nên các bạn đừng đọc mất thời gian)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
using static System.Console;
class Test
{
public static void PrintResult<T>(List<T> arr, Func<List<T>, IEnumerable<T>> sortMethod)
{
var st = new Stopwatch();
st.Start();
var tmp = sortMethod(arr);
st.Stop();
WriteLine("{0} : {1} ", tmp, st.Elapsed);
}
public static void Main()
{
PrintResult(new List<int>(Enumerable.Range(0, 1000000)), (sequence) => sequence.OrderByDescending(i => i));
PrintResult(new List<int>(Enumerable.Range(0, 1000000)), delegate(List<int> sequence) { sequence.Sort((x, y) => 0 - x.CompareTo(y));return sequence; } );
ReadLine();
}
}
Và nhận được kết quả như sau (trên máy mình test)
Chứng tỏ hàm Sort có tốc độ chậm hơn nhiều hàm OrderBy. (nếu các bạn đổi hàm Range(0,1000000) thành Range(0,100000000000000000000…) thì điều kì diệu sẽ xảy ra ).
Câu đố hôm nay là tại sao có sự khác nhau như vậy, và điều kì diệu gì mà mình nói là gì