Wie langsam ist eine DLL im Vergleich zu einer exe?



  • Hallo,
    ich habe eine Datenaufnahme in C++ geschrieben. Zu Testzwecken habe ich ein kleines Programm welches die vom Hersteller mitgelieferte Bibliothek anspricht. Diese habe ich in eine exe übersetzt um die mögliche Framerate zu testen. In meinen Tests kam heraus das ich die volle Aufnahmefrequenz von 383Hz in Vollauflösung schaffe. Nun habe ich das ganze in eine DLL gepackt um es innerhalb eines größeren Projekts zu verwenden. Nun sinkt meine Aufnahmegeschwindigkeit um ca. 130Hz auf 250Hz. Kann das möglich sein?

    Danke.



  • Exe und DLL Funktionen sind gleich schnell. Es könnte aber folgendes passiert sein. Wenn du alles in eine Exe packst, kann der Compiler diverse Funktionen inlinen und andersweitig optimieren. Bei einer DLL muss er die Funktionen immer anspringen.



  • cvbcb schrieb:

    Exe und DLL Funktionen sind gleich schnell.

    neuerdings mit dem funktionenweise nachladen hats wohl einen paar takte dazu für eine indirektion und evtl ein wenig synchronisation.

    cvbcb schrieb:

    Es könnte aber folgendes passiert sein. Wenn du alles in eine Exe packst, kann der Compiler diverse Funktionen inlinen und andersweitig optimieren. Bei einer DLL muss er die Funktionen immer anspringen.

    ja, das halte ich auch für am wahrscheinlichsten.
    und natürlich, daß die debug-version der dll genommen wurde.



  • [quote="volkard"]

    cvbcb schrieb:

    und natürlich, daß die debug-version der dll genommen wurde.

    oder dass die exe mit allen optimierungen gebaut wird und ein neu angelegtes dll projekt eventuell noch die default einstellungen hat (trotz release builds).



  • profiler verwenden.



  • [quote="rapso"]

    volkard schrieb:

    cvbcb schrieb:

    und natürlich, daß die debug-version der dll genommen wurde.

    oder dass die exe mit allen optimierungen gebaut wird und ein neu angelegtes dll projekt eventuell noch die default einstellungen hat (trotz release builds).

    Danke für eure Antworten.
    Wie kann ich diese Optimierungen vornehmen? Gibt es irgendwo einen Link wo das erklärt wird? Ich verwende Visual Studio 2008.

    Hab auch mal nach Profiler gegoogelt. Gibt es sowas evt. schon in Visual Studio implementiert?

    Dankeschön.



  • auf das project klicken -> properties bzw eigenschaften und dort unter compiler bei optimizations



  • rapso schrieb:

    auf das project klicken -> properties bzw eigenschaften und dort unter compiler bei optimizations

    Ok, ich habs unter Project --> Properties --> C/C++ --> Optimization gefunden. Was gibt es denn da zu beachten? Hab hier:http://msdn.microsoft.com/de-de/library/k1ack8f1(VS.80).aspx eine nicht wirklich hilfreiche Hilfe gefunden. Wenn ich Beispielsweise /O2 für optimierte Geschwindigkeit wähle, bekomme ich beim Kompilieren folgende Fehlermeldung: Command line error D8016 : '/O2' and '/RTC1' command-line options are incompatible

    Eigentlich bekomme ich bei jeder Einstellung einen Fehler.

    Dankeschön.





  • rapso schrieb:

    naja, auch ich muss dafuer googlen
    http://gregs-blog.com/2007/12/31/how-to-fix-visual-studio-bug-rtc1-and-clr-options-are-incompatible/
    😉

    Danke für deine guten Antworten.
    Ich habe versucht mit der entsprechenden MSDN Hilfe die verschiedenen Compiler-Schalter so zu setzen, dass meine Anwendung schneller wird. Leider ohne "großen Erfolg". Dadurch konnte ich wieder 20Hz rausholen, mehr aber nicht. Hat von euch evt. jemand einen Link zu einem Tutorial oder sonstiges indem erklärt wird, wie man eine DLL auf Geschindigkeit optimiert? Das wäre echt toll. Oder kann mir es jemand in diesem Thread erklären?

    Danke



  • Eine Funktion die in einer DLL liegt ist immer langsamer als eine Funktion direkt in der .exe (bzw. in dem selben Modul), da bei Funktionen aus anderen Modulen immer eine Indirektion über die Import Address Table vorliegt.


Anmelden zum Antworten