Performance von Funktionen (planungsgedanken)



  • Salut zusammen,

    mir ist die Geschwindigkeit bzw. Performance von Klassenfunktionen, Globalen und deren Datenverwaltung nicht ganz klar.

    Ich überlege ob ich eine recht grosse Funktion, welche nur selten gestartet werden soll (die Schleife(n) laufen Stunden) und selbst noch sehr viele kleine Funktionen aufruft, besser als Globale oder als Klassenfunktion(en) anlegen soll.
    Die Funktion(en) soll eine Schnittstelle auswerten.
    Der grösste Datenaustausch findet in einem Objekt einer Klasse statt (ca. 60 Objekte weiten sich über zwei weitere Klassen aus).
    Alle Objekte sind statisch, es werden auch keine neuen zur Laufzeit mehr angelegt.

    Tja, nun die Frage ob es günstiger ist diese Funktionen bzw. Funktionen global anzulegen?
    Ist der Zugriff einer Klassenfunktion auf die Elemente des eigenen Objektes schneller als von einer Globalen Funktion?
    Wie sieht es aus mit den internen aufrufen von Klassenfunktionen zu Klassenfunktionen des gleichen Objekts im Vergleich Global zu Global?

    Wie verhält es sich mit der Datenübergabe einer Funktion an die Elemente (inClass)?
    Ist es schneller die Werte der langläufigen Funktion in funktionseigenen register Variablen "zu sammeln" und in grossen (set)Funktion in der Klasse abzulegen oder direkt die Elemente als Speicher in der Funktion zu nutzen?
    Die gleiche Frage würde sich bei einer Klassenfunktion stellen, wenn Werte in Elemente anderer Objekte sollen.

    Es soll einfach so schnell wie möglich werden 🙂
    Bin gespannt 😃

    Tommy



  • tommy_tom_tom schrieb:

    Ist der Zugriff einer Klassenfunktion auf die Elemente des eigenen Objektes schneller als von einer Globalen Funktion?

    Nein, die Aufrufe sind jeweils gleich schnell. Das entscheidende Kriterium bei der Wahl zwischen globalen und Memberfunktionen ist auch nicht die Performance, sondern eine Designüberlegung.

    tommy_tom_tom schrieb:

    Ist es schneller die Werte der langläufigen Funktion in funktionseigenen register Variablen "zu sammeln" und in grossen (set)Funktion in der Klasse abzulegen oder direkt die Elemente als Speicher in der Funktion zu nutzen?

    Auch hier wird es kaum relevante Unterschiede geben. Vermeide das Schlüsselwort register , es ist ein Relikt aus alten Zeiten ohne grosse Bedeutung.

    tommy_tom_tom schrieb:

    Es soll einfach so schnell wie möglich werden 🙂
    Bin gespannt 😃

    Ein Tipp: Mach dir nicht zu grosse Gedanken um solche Mikrooptimierungen. Denn du verschwendest damit nur deine Zeit. Investiere diese besser dazu, ein robustes, übersichtliches und gut wartbares Programm zu kreieren. Sobald du nämlich Algorithmen hast, die etwas mehr tun (z.B. einige Berechnungen durchführen, etwas auf Konsole oder Bildschirm ausgeben, etc.), ist der Einfluss von Funktionsaufrufen, Variableninitialisierungen und anderer elementarer Operationen vernachlässigbar.



  • Die Performance von Funktionen ist nur interessant, wenn in den Funktionen viel Rechenaufwand geschieht, der eine Anwendung verlangsamt. Das ist dann keine allgemeine Frage, sondern eine Frage was die Funktion wie macht. So etwas misst man über Zeitvergleiche mit sehr vielen Durchläufen der Funktion. Wenn da keine wesentlichen Unterschiede erkennbar sind, haben weitere Planungsgedanken keinen Sinn! 😃


Log in to reply