Ich habe zwei geschachtelte Schleifen, bei denen die innere Schleife immer Zeug aus dem Objekt holt, über das die äußere Schleife iteriert. Bisher hatte ich das mit zwei for-Schleifen gemacht, etwa so:
Bei einem Datensatz hat das immer gut über sechs Minuten gedauert. Nun habe ich einfach mal aus Spaß das Ganze durch zwei foreach-Schleifen ersetzt, etwa so:
Ergebnis: Das, was vorher immer deutlich über sechs Minuten gedauert hat, dauert jetzt weniger als zwei Sekunden! 😲 Woran mag das liegen? Ich könnte mir vorstellen, dass die Runtime sich bei der for-Variante immer wieder neu eine Referenz auf die Objekte holen muss, diese aber bei der foreach-Variante bestehen bleiben. Oder so. Was meint Ihr?
C#:
for (int i = 0; i < RiesigesObjekt.Count; i++) {
for (int j = 0; j < RiesigesObjekt[i].Count; j++) {
MachWasMit(RiesigesObjekt[i][j]);
}
}
Bei einem Datensatz hat das immer gut über sechs Minuten gedauert. Nun habe ich einfach mal aus Spaß das Ganze durch zwei foreach-Schleifen ersetzt, etwa so:
C#:
foreach (Element e in RiesigesObjekt) {
foreach (UnterElement u in e) { MachWasMit(u); }
}
Ergebnis: Das, was vorher immer deutlich über sechs Minuten gedauert hat, dauert jetzt weniger als zwei Sekunden! 😲 Woran mag das liegen? Ich könnte mir vorstellen, dass die Runtime sich bei der for-Variante immer wieder neu eine Referenz auf die Objekte holen muss, diese aber bei der foreach-Variante bestehen bleiben. Oder so. Was meint Ihr?