Ist DLL langsamer als normaler Code?



  • ok, nur um das genau zu verstehen:
    Wenn ich dem Compiler vorher sag (vor dem kompilieren?), dass er die funktion aus dieser DLL nehmen soll, braucht er nicht so lang; wenn ich aber die DLL in laufzeit lade und die Funktion dann aufruf, dauerts jedesmal länger.
    Hab ich das so richtig verstanden?



  • Chimaira schrieb:

    ok, nur um das genau zu verstehen:
    Wenn ich dem Compiler vorher sag (vor dem kompilieren?), dass er die funktion aus dieser DLL nehmen soll, braucht er nicht so lang; wenn ich aber die DLL in laufzeit lade und die Funktion dann aufruf, dauerts jedesmal länger.
    Hab ich das so richtig verstanden?

    Nein. Wenn die DLL vom OS beim Aufruf der Funktion bereits geladen wurde, geht der Aufruf vermutlich in etwa so schnell als wenn du die Funktion statisch gelinkt hättest. Wenn die DLL aber erst in den Speicher geladen werden muss, hast du natürlich einen kleinen Overhead.



  • Einen einmaligen Overhead.

    Unter Windows ist kein Geschwindigkeitsunterschied zwischen DLL und EXE zu bemerken. Unter Linux leider schon, weil dort Position Independent Code verwendet wird.



  • Ringding schrieb:

    Einen einmaligen Overhead.

    Ohne, dass ich mich jetzt mit dll usw. auskennen würde, wage ich einfach mal zu behaupten, dass das so nicht richtig ist. Die Schnittstelle zu einer externen, dynamischen Bibliothek ist eine Art Grenze, über die wohl keine Optimierungen, wie zum Beispiel Inlining, durchgeführt werden können. Aus diesem Grund wird es oft nicht bei einem einmaligen Overhead bleiben, sondern bei vielen Methodenaufrufen etc. von Methoden etc. der dll zu einer Performanceeinbuße kommen. Das sollte aber im Normalfall nicht relevant sein.



  • Es geht hier doch um die Geschwindigkeit des Codes und nicht um die Möglichkeiten zur Optimierung!



  • schlechter optimiert wird der Code, da die Compiler ja auch über Modul )Objekt Dateien) Grenzen hinweg optimieren können, bei DLLs geht das ja aber nicht, da sonst der DLL Vorteil verloren gehen würde 🙂

    Aber ich denke, wenn eine DLL wirklich Sinn macht, dann ist es falsch keine DLL einzusetzen, die Geschwindigkeitseinbussen (fehlendes Inlining, laden der DLL) sind wahrscheinlich sogar unwichtig für dein Programm.

    Macht euer Design nicht immer von micro Optimierung abhängig, Code der wartbar ist, ist idr. genauso wichtig, wenn nicht wichtiger, als 10ms weniger startzeit.



  • Ringding schrieb:

    Unter Windows ist kein Geschwindigkeitsunterschied zwischen DLL und EXE zu bemerken. Unter Linux leider schon, weil dort Position Independent Code verwendet wird.

    linux ist einfach nur schlecht!

    @net:

    Gelbe Karte.

    Derartige Kommentare sind in einer technischen Diskussion unerwünscht. Ich bitte darum davon abzusehen Threads unnötig in Flamewars zu verwandeln.

    Vielen Dank

    mfg

    webmaster@c-plusplus.net
    *



  • hihi



  • kingruedi schrieb:

    Aber ich denke, wenn eine DLL wirklich Sinn macht, dann ist es falsch keine DLL einzusetzen, die Geschwindigkeitseinbussen (fehlendes Inlining, laden der DLL) sind wahrscheinlich sogar unwichtig für dein Programm.

    Macht euer Design nicht immer von micro Optimierung abhängig, Code der wartbar ist, ist idr. genauso wichtig, wenn nicht wichtiger, als 10ms weniger startzeit.

    Ok, ich stimme dir natürlich zu, aber es sollte einem klar sein, dass eine sehr kleine Methode, die man in seinem Code 100000000 mal in einem performancekritischen Bereich aufruft, besser nicht aus einer dll kommen sollte.



  • oops, falsche Antwort zur falschen Frage.

    mfg JJ


Anmelden zum Antworten