KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
When using the extension method of IEnumerable<T> Count() , an array is at least two times slower than a list. Function Count() List<int> 2,299 int[] 6,903 From where did the difference comes? I understand that both are calling the Count property of ICollection : If the type of source implements ICollection, that implementation is used to obtain the count of elements. Otherwise, this method determines the count. For the list it returns List<T>.Count , and for array, Array.Length . Moreover, Array.Length is supposed to be faster than List<T>.Count . Benchmark: class Program { public const long Iterations = (long)1e8; static void Main() { var list = new List<int>(){1}; var array = new int[1]; array[0] = 1; var results = new Dictionary<string, TimeSpan>(); results.Add("List<int>", Benchmark(list, Iterations)); results.Add("int[]", Benchmark(array, Iterations)); Console.WriteLine("Function".PadRight(30) + "Count()"); foreach (var result in results) { Console.WriteLine("{0}{1}", result.Key.PadRight(30), Math.Round(result.Value.TotalSeconds, 3)); } Console.ReadLine(); } public static TimeSpan Benchmark(IEnumerable<int> source, long iterations) { var countWatch = new Stopwatch(); countWatch.Start(); for (long i = 0; i < iterations; i++) source.Count(); countWatch.Stop(); return countWatch.Elapsed;
Tags (comma-separated)
Save Edits
Cancel