Funktion optimieren: viele aufrufe aber wenig zeit (allgemein)



  • Hallo,

    ich habe gerade über Profiling meines codes festgestellt, dass eine meiner Funktionen extrem viel Zeit frisst. Das Problem ist: Sie wird einfach sehr sehr oft aufgerufen. Abhängig vom input ergeben sich zahlen wie z.B:

    * Zeit die in der Funktion verbraucht wird bei 1 Aufruf: 1e-7 Sekunden.
    * Anzahl Aufrufe der Funktion: 7.5 Millionen

    macht dann z.B. ca. 0.7 Sekunden laufzeit von 1 Sekunde gesamtlaufzeit.

    Bei größerem (aufwändigeren) input wirds natürlich viel viel heftiger.

    Ich weiß leider net wie ich an sowas rangehen soll. Meine Frage: Gibt es Methoden um das Problem zu beseitigen. Meine Vermutung ist, dass das algorithmisch bedingt ist und ich eher am Algorithmus was drehen müsste.
    Hier in der Funktion zu optimieren ist meiner Meinung nach blödsinn. Wie seht ihr das?
    Gibt es noch vorgehensweisen die ihr tun würdet?

    Danke



  • gastsag schrieb:

    Wie seht ihr das?

    Grundsätzlich würde ich in diesen Fall erst einmal prüfen warum die Funktion so häufig aufgerufen wird, und ob dies wirklich nötig ist. Wenn sich die Anzahl der Aufrufe aber nicht reduzieren lässt, ist die Funktion dran.



  • Wenn du uns den Code zeigen könntest, wäre das eine große Hilfe für beide Seiten.



  • gastsag schrieb:

    * Zeit die in der Funktion verbraucht wird bei 1 Aufruf: 1e-7 Sekunden.
    * Anzahl Aufrufe der Funktion: 7.5 Millionen

    macht dann z.B. ca. 0.7 Sekunden laufzeit von 1 Sekunde gesamtlaufzeit.

    Niedlich 😉

    Bei größerem (aufwändigeren) input wirds natürlich viel viel heftiger.

    Ich weiß leider net wie ich an sowas rangehen soll.

    Dann miss das doch mal durch, wie gut/schlecht das Ganze mit größerem/mehr Input skaliert. Geht die Laufzeit hoch oder die Zahl der Aufrufe? Ist für dich die Zahl der Aufrufe plausibel, d.h. weißt du warum es so viele sind? Die Zahlen zu messen ist der erste Schritt. Der zweite ist jetzt, zu erkennen warum die Zahlen sind, wie sie sind. Erst dann kannst du daran gehen eine der Zahlen (Funktionszeit oder Aufrufzahl) zu optimieren.



  • gastsag schrieb:

    Meine Vermutung ist, dass das algorithmisch bedingt ist und ich eher am Algorithmus was drehen müsste.
    Hier in der Funktion zu optimieren ist meiner Meinung nach blödsinn. Wie seht ihr das?

    Wenn der Algorithmus suboptimal ist, dann schreib dein Programm um dass es einen schnelleren verwendet. Wenn der Algorithmus bereits optimal ist, dann optimier' die Funktion.
    Weiss nicht was daran so schwer ist, wieso man zu dem Thema grossartig Meinungen einholen müsste.


Anmelden zum Antworten