451 Stimmen

Welche Schleife in .NET läuft schneller, "for" oder "foreach"?

In C#/VB.NET/.NET, welche Schleife läuft schneller, for o foreach ?

Seitdem ich gelesen habe, dass ein for Schleife arbeitet schneller als eine foreach Schleife a vor langer Zeit Ich nahm an, dass dies für alle Sammlungen, generischen Sammlungen, alle Arrays usw. gilt.

Ich habe Google durchforstet und einige Artikel gefunden, aber die meisten davon sind nicht schlüssig (lesen Sie die Kommentare zu den Artikeln) und haben ein offenes Ende.

Ideal wäre es, jedes Szenario aufzulisten und die beste Lösung dafür zu nennen.

Ein Beispiel (nur ein Beispiel dafür, wie es sein sollte):

  1. für die Iteration eines Arrays von 1000+ Zeichenketten - for ist besser als foreach
  2. zur Iteration über IList (nicht generische) Zeichenketten - foreach ist besser als for

Ein paar Referenzen im Internet für das gleiche gefunden:

  1. Ursprünglicher großer alter Artikel von Emmanuel Schanzer
  2. CodeProject FOREACH Vs. FOR
  3. Blog - Zum foreach oder nicht foreach das ist die Frage
  4. ASP.NET Forum - NET 1.1 C# for vs foreach

[Bearbeiten]

Abgesehen vom Aspekt der Lesbarkeit bin ich wirklich an Fakten und Zahlen interessiert. Es gibt Anwendungen, bei denen es auf die letzte Meile der Leistungsoptimierung ankommt.

3voto

Chuck Conway Punkte 16031

Jeffrey Richter sprach kürzlich in einem Podcast über den Leistungsunterschied zwischen for und foreach: http://pixel8.infragistics.com/shows/everything.aspx#Episode:9317

3voto

GeekyMonkey Punkte 11711

Wenn Sie nicht gerade an einer speziellen Geschwindigkeitsoptimierung arbeiten, würde ich sagen, dass Sie die Methode verwenden sollten, die den am einfachsten zu lesenden und zu wartenden Code ergibt.

Wenn ein Iterator bereits eingerichtet ist, wie bei einer der Auflistungsklassen, dann ist foreach eine gute und einfache Option. Und wenn es sich um einen Integer-Bereich handelt, den Sie iterieren, dann ist for wahrscheinlich sauberer.

3voto

Tarik Punkte 76203

For hat eine einfachere Logik zu implementieren, so dass es schneller ist als foreach.

3voto

Oliver Friedrich Punkte 8805

Ich habe es vor einiger Zeit getestet, mit dem Ergebnis, dass ein for Schleife ist viel schneller als eine foreach Schleife. Die Ursache ist einfach, die foreach Schleife muss zunächst eine Instanz der IEnumerator für die Sammlung.

2voto

Craig Gidney Punkte 17006

Beachten Sie, dass die for-Schleife und die foreach-Schleife nicht immer gleichwertig sind. Listenaufzähler lösen eine Ausnahme aus, wenn sich die Liste ändert, aber bei einer normalen for-Schleife erhalten Sie diese Warnung nicht immer. Sie können sogar eine andere Ausnahme erhalten, wenn sich die Liste genau zum falschen Zeitpunkt ändert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X