BAGZZlash
Aktives Mitglied
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?