440 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.

1voto

Sean Devlin Punkte 1612

Ich denke, dass for in den meisten Fällen geringfügig schneller ist als foreach, aber das ist wirklich nicht der Punkt. Eine Sache, die ich nicht gesehen habe, ist, dass in dem Szenario, von dem Sie sprechen (d.h. eine Webanwendung mit hohem Volumen), der Leistungsunterschied zwischen for und foreach keinen Einfluss auf die Leistung der Website haben wird. Sie werden durch die Anfrage-/Antwortzeit und die DB-Zeit begrenzt, nicht durch for vs. foreach.

Abgesehen davon verstehe ich Ihre Abneigung gegen foreach nicht. Meiner Meinung nach ist foreach in Situationen, in denen beides verwendet werden könnte, in der Regel klarer. Ich in der Regel reservieren für für Situationen, in denen ich brauche, um eine Sammlung in einigen hässlich, nicht-Standard Weise durchlaufen.

0voto

shadowf Punkte 1146

Ich musste einige große Daten mithilfe von drei verschachtelten Schleifen analysieren (auf List<MyCustomType> ). In Anlehnung an Rob Fonseca-Ensors obigen Beitrag dachte ich, es wäre interessant, die Zeit zu messen und den Unterschied zu vergleichen, indem man für y foreach .

Der Unterschied war: Das foreach (drei foreach verschachtelt wie foreach{foreach{forech{}}} erledigte die Aufgabe in 171.441 Sekunden, während for (for{for{for{}}}) es in 158.616 Sekunden.

Jetzt sind 13 Sekunden etwa 13% Zeitersparnis - was für mich von einiger Bedeutung ist. Allerdings ist foreach auf jeden Fall weitaus lesbarer als die Verwendung von drei indizierten-fors...

0voto

Jonny Punkte 1

Ab .NET Framework 4 können Sie auch Parallel.For und Parallel.ForEach wie hier beschrieben verwenden: C# Multithreading-Schleife mit Parallel.For oder Parallel.ForEach

0voto

Hemalatha Punkte 1

Ich erwähnte diese Details auf der Grundlage der Geschwindigkeit der Sammlung auf for und foreach.

List-For-Schleife ist etwas schneller als Foreach-Schleife

ArrayList - For Loop ist mehr als 2 mal schneller als Foreach Loop.

Array - Beide sind gleich schnell, aber die Foreach-Schleife scheint ein bisschen schneller zu sein.

0voto

Mahesh Velaga Punkte 20889

Zumindest habe ich noch keinen meiner Kollegen oder Vorgesetzten gesehen, der das behauptet hat. Das ist einfach lächerlich, wenn man bedenkt, dass es keinen signifikanten Geschwindigkeitsunterschied gibt zwischen for y foreach . Das Gleiche gilt, wenn er darum bittet, sie in allen Fällen zu benutzen!

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