今天在看code的時候,發現一段看起來可以改善效能,於是就來試一下。這段程式是要把一個字串陣列作亂數排序,原本是自己去Sort,我改用LINQ幫我做Sort,測試之後速度快了五倍多,可說是飛快,下面是程式部分。
static void Main(string[] args) { Process proc = Process.GetCurrentProcess(); Console.WriteLine("Random by Old Way"); TimeSpan sTime=proc.TotalProcessorTime; for (int i = 0; i < 10000; i++) { RandomString(100); } Console.WriteLine(proc.TotalProcessorTime-sTime); Console.WriteLine(); foreach (var s in RandomString(10)) { Console.Write(s); } Console.ReadLine(); } public static String[] RandomString(int length) { String[] index = new String[length]; for (int i = 0; i < index.Length; i++) { index[i] = i.ToString(CultureInfo.InvariantCulture); } return RandomizeSort(index); } public static String[] RandomizeSort(String[] input) { //Old way for (int t = 0; t < input.Length; t++) { String tmp = input[t]; int r = new Random().Next(t, input.Length); input[t] = input[r]; input[r] = tmp; } return input; //LINQ //return input.OrderBy(x=>Guid.NewGuid()).ToArray(); }
我每次測試都用大小為100的字串陣列,跑10000次,兩種方式各測試五次的結果平均起來
Old way : 4.88907134 sec
LINQ : 0.86424554 sec
LINQ的速度是原本方式的 17.68% ,可說是進步不少。
可賀可喜,收工。
No comments:
Post a Comment