Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Routine aus einer Dll aufrufen, wie ist da der Zeitaufwand

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 18.06.2010, 11:27    Titel: Routine aus einer Dll aufrufen, wie ist da der Zeitaufwand Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 18.06.2010, 15:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.06.2010, 17:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 18.06.2010, 20:01    Titel: Antworten mit Zitat

Naja rein von den Cycles her sind DLL-Calls deutlich aufwändiger. funkeld wirds aber niemals merken:D
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 19.06.2010, 10:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.06.2010, 12:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 19.06.2010, 14:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 19.06.2010, 19:20    Titel: Antworten mit Zitat

@croco, Jojo: Von wem ist der Thread?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.06.2010, 19:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 20.06.2010, 12:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.06.2010, 13:01    Titel: Antworten mit Zitat

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. happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz