Почему IEnumerable медленный, а List быстрый?

Наткнулся на этот код.

var dic = new Dictionary<int, string>();
for(int i=0; i<20000; i++)
{
    dic.Add(i, i.ToString());
}

var list = dic.Where(f => f.Value.StartsWith("1")).Select(f => f.Key);//.ToList(); //uncomment for fast results 
Console.WriteLine(list.GetType());
var list2 = dic.Where(f => list.Contains(f.Key)).ToList();
Console.WriteLine(list2.Count())

Поэтому, когда .ToList () комментируется, это медленно, когда нет - это быстро. воспроизводимоеВот Как это можно объяснить? Должен ли я всегда делать все, чтобы ToList () обеспечивал скорость (т. Е. В каких случаях IEnumerable был бы более предпочтительным)? Заметьте, я говорю только о linq для объектов, я знаю linq to sql лень и все такое.

Ответы на вопрос(4)

Ваш ответ на вопрос