Tests show that .ToList() method has the best performance (for a list with elements 21474836, it works after about 48 ms on a Core i5 processor for a laptop).
Every other method is slower, and a method using .Add() is the worst in terms of performance.
Here are some test codes:
class Program { static void Main() { var list = new List<int>(); for (int i = 0; i < int.MaxValue / 100; i++) { list.Add(i); } TimeItAccurate(ListCopy_1, list, 10); TimeItAccurate(ListCopy_2, list, 10); TimeItAccurate(ListCopy_3, list, 10); TimeItAccurate(ListCopy_4, list, 10); TimeItAccurate(ListCopy_5, list, 10); } private static List<int> ListCopy_1(List<int> list) { var newList = list.ToList(); return newList; } private static List<int> ListCopy_2(List<int> list) { var newList = new List<int>(list.Count); foreach (var i in list) { newList.Add(i); } return newList; } private static List<int> ListCopy_3(List<int> list) { var newList = new List<int>(list.ToArray()); return newList; } private static List<int> ListCopy_4(List<int> list) { var newList = new List<int>(list.Count); newList.AddRange(list); return newList; } private static List<int> ListCopy_5(List<int> list) { var newList = new List<int>(list); return newList; } public static void TimeItAccurate<TIn, TResult>(Func<TIn, TResult> func, TIn argument, int iterationsCount) {
And the results:
Result (.ToList()): ListCopy_1(...) == System.Collections.Generic.List`1[System.Int32] 10 iterations done in 474 ms. Average time: 47.40000 ms. Result (for-cycle with .Add()): ListCopy_2(...) == System.Collections.Generic.List`1[System.Int32] 10 iterations done in 1896 ms. Average time: 189.60000 ms. Result (ctor with .ToArray()): ListCopy_3(...) == System.Collections.Generic.List`1[System.Int32] 10 iterations done in 981 ms. Average time: 98.10000 ms. Result (.AddRange()): ListCopy_4(...) == System.Collections.Generic.List`1[System.Int32] 10 iterations done in 959 ms. Average time: 95.90000 ms. Result (new List<int>(list)): ListCopy_5(...) == System.Collections.Generic.List`1[System.Int32] 10 iterations done in 480 ms. Average time: 48.00000 ms.
source share