Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 18.06.2010, 11:27 Titel: Routine aus einer Dll aufrufen, wie ist da der Zeitaufwand |
|
|
Hallo, ich möchte eine Dll als Baukastensystem erstellen und möglichs viele Bausteine zum Aufrufen dort reinpacken.
Jezt meine Frage, wie hoch ist der Zeitliche Aufwand einer Routine in einer Dll aufzurufen?
Gruss |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 18.06.2010, 15:04 Titel: |
|
|
Gewaltig im Vergleich zu einer normalen Funktion.
Immerhin muss Windows erst die DLL laden (was alleine schon mindestens solange dauert wie ein Programm zu starten). Erst dann kann Windows die Funktion raussuchen, die du aufrufen willst (das dauert nochmal). Und dann kann die Funktion überhaupt erst überprüft werden (es muss sichergestellt werden, dass es sie auch wirklich gibt und nicht beschädigt ist).
Und erst dann wird sie ausgeführt. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.06.2010, 17:30 Titel: |
|
|
Das stimmt so nur bedingt. Schließlich kannst du auch die Funktionshandles vorab ermitteln, und ich bin mir auch ziemlich sicher, dass die gewissermaßen "gecached" werden - es macht schließlich keinen Sinn, mehrmals dynamisch zu binden, die DLL wird ja nicht alle paar Millisekunden an eine neue Speicheradresse verschoben. => Erster Aufruf evtl teuer, danach "normal". _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 18.06.2010, 20:01 Titel: |
|
|
Naja rein von den Cycles her sind DLL-Calls deutlich aufwändiger. funkeld wirds aber niemals merken:D |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 19.06.2010, 10:08 Titel: |
|
|
28398 hat Folgendes geschrieben: | Gewaltig im Vergleich zu einer normalen Funktion.
Immerhin muss Windows erst die DLL laden (was alleine schon mindestens solange dauert wie ein Programm zu starten). Erst dann kann Windows die Funktion raussuchen, die du aufrufen willst (das dauert nochmal). Und dann kann die Funktion überhaupt erst überprüft werden (es muss sichergestellt werden, dass es sie auch wirklich gibt und nicht beschädigt ist).
Und erst dann wird sie ausgeführt. |
Wenn das so wäre, dann wären sämtliche Windowsprogramme absolute Schneckenpferde. Weil fast alle grossen Windows-Programme, Office-Pakete, Spiele usw. zu 99% in DLL's stecken.
Der Punkt ist: Das Initialisieren dauert ein paar Millisekunden, aber das machst du einmal beim Programmstart. Dann liegen die Funktionen im Speicher, die Handles sind bekannt und der Aufruf dürfte fast genauso schnell laufen wie eine modul-interne Funktion.
VG!
Croco |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.06.2010, 12:27 Titel: |
|
|
Richtig. DLL mag zwar "dynamisch binden" heißen, aber das heißt bei DLLs nur "lade das Teil in meinen Adressraum, Adressen anpassen, binden" und nicht "Finde bei jedem Aufruf einer Funktion raus, wie die jetzt gebunden werden muss" à la OOP. Sobald einmal gebunden wurde, können alle Sprünge in DLL-Unterprogramme genau so verwendet werden wie in "normale" Unterprogramme. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 19.06.2010, 14:31 Titel: |
|
|
http://www.freebasic-portal.de/befehlsreferenz/dylibload-239.html
Man kann vermutlich davon ausgehen, dass DYLIBLOAD und DYLIBSYMBOL langsam sind, der Funktionsaufruf nachher jedoch fast so schnell wie eine "native" Funktion ist. Die DLL und die Symbole werden ja nur am Anfang geladen, der Zugriff nachher sollte keine weiteren Zugriffe auf die DLL-Datei hervorrufen. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 19.06.2010, 19:20 Titel: |
|
|
@croco, Jojo: Von wem ist der Thread? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.06.2010, 19:27 Titel: |
|
|
28398 hat Folgendes geschrieben: | @croco, Jojo: Von wem ist der Thread? |
Und? Rechtfertigt das falsche Antworten? Es würde rechtfertigen, dass du dich einfach aus der Sache raushältst. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 20.06.2010, 12:50 Titel: |
|
|
Bei der Betrachtung von Windows sollte jedem klar sein, dass der Zeitaufwand vernachlässigbar ist.
Außerdem war das keine falsche Antwort. Ich habe lediglich ausführlich beschrieben was passiert, und ein Vergleiche gemacht. Nichts davon ist falsch, rein von den Cycles her ist das auch ein großer Unterschied. Nur sind die paar hundert bis tausend Cycles beim ersten Aufruf schlichtweg vernachlässigbar. Trotzdem ist es - zumindest beim ersten Aufruf - ein gewaltiger Unterschied. Ein gewaltiger Unterschied, der trotzdem vernachlässigbar ist.
Jetzt verstanden? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.06.2010, 13:01 Titel: |
|
|
28398 hat Folgendes geschrieben: | Bei der Betrachtung von Windows sollte jedem klar sein, dass der Zeitaufwand vernachlässigbar ist. |
Das ist bei so ziemlich allen Betriebssystemen die selbe Chose - dynamisches Binden ist schließlich nicht etwas, das irgendein OS-Entwickler bei M$ oder Apple erfunden hätte.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|