Ein question früher geschrieben hat mich denken. Würden Any()
und Count()
ähnlich funktionieren, wenn sie auf einer leeren Liste verwendet werden?C#: Beliebige() vs Count() für eine leere Liste
Wie erklärt here, sollten beide die gleichen Schritte von GetEnumerator()/MoveNext()/Dispose()
gehen.
Getestet habe ich diese auf LINQPad schnelles Programm aus:
static void Main()
{
var list = new List<int>();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 10000; i++)
list.Any();
stopwatch.Stop();
Console.WriteLine("Time elapsed for Any() : {0}", stopwatch.Elapsed);
stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 10000; i++)
list.Count();
stopwatch.Stop();
Console.WriteLine("Time elapsed for Count(): {0}", stopwatch.Elapsed);
}
Und das allgemeine Ergebnis scheint darauf hinzudeuten, dass Count()
schneller in dieser Situation ist. Warum das?
Ich bin mir nicht sicher, ob ich den Benchmark richtig gemacht habe, ich würde jede Korrektur schätzen, wenn nicht.
Edit: Ich verstehe, dass es semantisch mehr Sinn machen würde. Der erste Link, den ich in der Frage gepostet habe, zeigt eine Situation, in der es sinnvoll ist, Count()
direkt zu verwenden, da der Wert verwendet würde, daher die Frage.
würden sie beide sehr schnell, aber, wenn ein 'list' nur die' Count' Eigenschaft zu testen, anstatt die 'Count()' Erweiterung, die keine Aufzählung erfordert. – Jodrell
Was genau haben Ihre Benchmarks gezeigt? Ich würde erwarten, dass es nur so schnell sein würde, wenn man nur 10000 Mal anruft, um nicht vernünftig messbar zu sein. –
Der Grund "Any" ist im Allgemeinen besser, weil es nur eine Sache in der Aufzählung finden muss, aber die Zählung muss alle von ihnen finden. In Ihrem Test ist die Liste leer, also finden Sie offensichtlich die erste, und das Finden aller macht keinen großen Unterschied –