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.

4voto

Tad Donaghe Punkte 6640

Sie können ihm wirklich den Kopf verdrehen und stattdessen eine IQueryable .foreach-Schließung verwenden:

myList.ForEach(c => Console.WriteLine(c.ToString());

4voto

cjk Punkte 44394

Die beiden werden fast genau gleich ablaufen. Schreiben Sie einen Code, der beide verwendet, und zeigen Sie ihm dann die AWL. Die Berechnungen sollten vergleichbar sein, d.h. es sollte keinen Leistungsunterschied geben.

4voto

Cade Roux Punkte 85601

In den meisten Fällen gibt es wirklich keinen Unterschied.

Normalerweise müssen Sie foreach immer dann verwenden, wenn Sie keinen expliziten numerischen Index haben, und Sie müssen for immer dann verwenden, wenn Sie keine iterierbare Sammlung haben (z.B. Iteration über ein zweidimensionales Array-Gitter in einem oberen Dreieck). Es gibt einige Fälle, in denen Sie eine Wahl haben.

Man könnte argumentieren, dass for-Schleifen ein wenig schwieriger zu pflegen sind, wenn magische Zahlen im Code auftauchen. Sie sollten sich zu Recht darüber ärgern, dass Sie keine for-Schleife verwenden können und stattdessen eine Sammlung aufbauen oder ein Lambda verwenden müssen, um eine Untersammlung aufzubauen, nur weil for-Schleifen verboten wurden.

4voto

colethecoder Punkte 1139

Es erscheint etwas seltsam, die Verwendung einer for-Schleife völlig zu verbieten.

Es gibt einen interessanten Artikel aquí die einen Großteil der Leistungsunterschiede zwischen den beiden Schleifen abdeckt.

Ich würde sagen, ich persönlich finde foreach etwas lesbarer als for-Schleifen, aber man sollte das Beste für die jeweilige Aufgabe verwenden und nicht extra langen Code schreiben, um eine foreach-Schleife einzubauen, wenn eine for-Schleife besser geeignet ist.

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

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