Zuweisung von Speicher bei der Verwendung von foreach-Schleifen in C#

Ich kenne die Grundlagen, wie foreach-Schleifen arbeiten in C# (Wie foreach-Schleifen arbeiten, die in C#)

Frage ich mich, ob die Verwendung der foreach-Speicher zuweist, verursachen Müll-Sammlungen? (für alle, eingebaute System-Typen).

Beispielsweise mit dem Reflektor auf der System.Collections.Generic.List<T> Klasse, hier ist die Implementierung von GetEnumerator:

public Enumerator<T> GetEnumerator()
{
    return new Enumerator<T>((List<T>) this);
}

Auf jede Nutzung dieser ordnet einen neuen Enumerator (und noch mehr Müll).

Alle Arten, dies zu tun? Wenn ja, warum? (kann nicht eine einzelne Enumerator wiederverwendet werden?)

a) Dies ist eine Implementierung detail. Diese sind irrelevant. b) Der GC existiert.
Ich denke, das Hauptproblem mit single-Enumerator wäre thread-Sicherheit.
Dies ist nicht beschränkt auf foreach(). Die ganze Idee des habens eines GC ist, dass kleine, kurzlebige Objekte sind sehr Billig. Wir "verschwenden" Sie die ganze Zeit, wie in text = text.ToLower();. Mach dir keine sorgen. Die meisten re-use-Regelungen erweisen teurer.
Jeder, der kommt an dieser Seite ist wohl auch hier für einen guten Grund. Es gibt definitiv Zeiten, wenn jede einzelne Zuordnung ist wichtig und sollte möglichst vermieden werden. ("Don' T worry about it", mag wahr sein, 99% der Zeit, aber wenn es darauf ankommt, kann es die Materie eine ganze Menge.)
Die anti-perf Denkweise von vielen Rednern meiner Lieblingssprache C#, und die ständige stach von Ihnen, eine sehr große Gruppe, bei der bloßen Andeutung, dass jemand das sorgen über eine low-level-perf Anliegen (siehe Erster Kommentar oben), haben in der Vergangenheit schon schädlich genug, um zu überlegen, ob dies die richtige Sprache für diejenigen von uns, die tun Pflege. Solche Mentalitäten beigetragen zu einem Jahrzehnt und halten von C# / .NET von der Fokussierung auf lean and mean. Ich bin so froh, dass Mentalität wurde nun ersetzt mit netcore, ich wünschte nur, es würde durch die Reihen schneller.

InformationsquelleAutor lysergic-acid | 2013-08-31

Schreibe einen Kommentar