Laufzeit;Schleifen
-
Hi,
also ich habe folgende Möglichkeiten:
for each i from 1 to 100 operationA() for each i from 1 to 100 operationB()
und
for each i from 1 to 100 operationA() operationB()
Im ersten habe ich zum ausführen von operationA() und operationB() jeweils eine eigene Schleife, im zweiten Teil laufen beide Operationen in einer Schleife. Welche Variante ist nun schneller? Also ich würde denken beide sind gleichschnell (wenn man mal von dem initialisieren der Schleife+Zähler absieht). Nun habe ich aber mal irgendwo was anderes gehört (sorry, finde keine Quelle mehr). Undzwar ging es da um ein Computerspiel, in welchem die Hauptschleife etwa wie die folgende aussieht.
for each object i { // Physikteil Bewege Objekt i Berechne Kollision mit anderen Objekten // Anzeige Zeichne Objekt }
Was wohl besser sein soll, als
for each object i { Bewege Objekt Berechne Kollision } for each object i { Zeichne Objekt }
Ist die erste Variante wirklich besser? Eigentlich nicht, oder? In der zweiten Variante könnte ich die Berechnungen besser in Funktionen packen, also die Funktionalität besser aufteilen, was aus softwaretechnischer Sicht doch besser wäre.
Welche Variante würdet ihr bevorzugen? (Hoffentlich findet ihr die Frage nicht zu trivial
)
MfG Stefan
-
Hi,
also das kann man so allgemein wohl schwerlich beantworten.
Nehmen wir mal an, das 'Zeichnen' an sich benötigt einen minimalen Zeitaufwand.
Da könnte es theoretisch von Vorteil sein, dass die berechneten Koordinaten noch in Prozessorregistern liegen.Aber im Allgemeinen schätze ich Version 1 schneller.
Denn nehmen wir mal stark an, das Zeichnen setzt z.B. ein Locken einer Surface voraus, oder ein "StartRender - Endrender".Dann ist es doch klarer effizienter, alle Zeichnungen hintereinanderweg zwischen diesen beide Sachen zu zeichnen, als für jedes Objekt einzeln.
Meist will man ja das Zeichnen möglichst schnell abgearbeitet haben.
Komplexe Berechnungen sind daher möglichst vorher zu erledigen.
-
die variante mit nur einer schleife ist immer schneller. auch wenn's nicht ins gewicht fällt, weil operationA und operationB viel zeit brauchen. ich würd' also eine einzelne schleife vorziehen
-
Danke für die schnellen Antworten! Aber leider sind die Antworten ja jetzt gegensätzlich, aber so wie Sepp das meinst muss man das dann wohl im konkreten Fall sehen, im Falle einer Spieleengine wären also zwei Schleifen besser, generell aber eine.
-
Real_PsychoDAD schrieb:
...aber so wie Sepp das meinst muss man das dann wohl im konkreten Fall sehen...
ja, wenn operationB nix machen kann, weil operationA noch nicht fertig ist, dann sind 2 schleifen besser. musste halt sehen was in deinem fall das günstigste ist.