Warum IEnumerable langsam und List ist schnell?

Kam über diesen Code.

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())

Wenn also .ToList () kommentiert wird, ist es langsam, wenn nicht - ist es schnell. ReproduzierbarHier Wie könnte das erklärt werden? Sollte ich immer alles in ToList () eintragen, um die Geschwindigkeit sicherzustellen (d. H. Unter welchen Umständen wäre IEnumerable vorzuziehen)? Hinweis Ich spreche nur von Linq zu Objekten, ich kenne Linq zu SQL-Faulheit und so.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage