Aufbruch zu neuen Ufern: C# 3.0

Verzögerte Ausführung

Die Ergebnisübergabe als Iterator ist besonders wichtig, denn er ermöglicht ein Feature namens Deferred Query Evaluation. Damit ist gemeint, dass die Abfrage erst in dem Moment ausgeführt wird, in dem die Ergebnisse auch benötigt werden. In unserem Beispiel erfolgt der Select also erst in der foreach-Schleife, in der die Ergebnisse auf der Console ausgegeben werden.

Diese verzögerte Ausführung der Abfrage löst ein zentrales Problem vieler OR-Mapper, nämlich deren großen Speicherbedarf und ihre geringe Performance. Würde die Abfrage sofort ausgeführt, so müsste das Ergebnis im Speicher gehalten werden. Bei Queries gegen große Datenbestände können so riesige Ergebnis-Sets entstehen.

Oft jedoch sind diese gar nicht nötig, da nur der erste oder die ersten n Datensätze tatsächlich ausgewertet werden. Aber selbst wenn alle zurückgegebenen Datensätze einer Abfrage verarbeitet werden, bringt die Deferred Query Evaluation Vorteile: C# 3.0 lädt die Ergebnisse nacheinander in den Speicher und nicht mehr alle gleichzeitig, so dass der benötigte Arbeitsspeicher minimal bleibt.