DLLImport und Geschwindigkeit

29/09/2008 - 09:05 von Marco Maetzler | Report spam
Hallo NG,

Ich arbeite zur Zeit intensiv mit WinAPI Calls mittels DLLImport.
Das funktioniert alles wunderbar.

Ich habe allerdings bedenken das solche Calls in den unmanaged Bereich nicht
gerade berauschend schnell sein werden.

Darum hier meine Frage:
Welche Optionen, Attribute, Einstellungen kann/soll ich vornehmen, dass
solche WinAPI Calls so schnell wie möglich vonstatten gehen?

Vermutung: Ich nehme mal an, das man mit dem Attribut "ExactSpelling=true"
das Framework daran hindert in der DLL nach der gewünschten Funktion zu
suchen (z.b. ANSI oder Unitcode Methoden), und der Aufruf schneller
ausgeführt werden kann.

Gibt es noch weitere "Tricks" mit welchen ich mehr Tempo rausholen kann? Wie
sieht es prinzipiell aus mit mehrfachen Aufrufen des selben WinAPI Calls?
Geht da das Framework immer wieder die Einsprungadresse suchen oder wird das
nur einmal gemacht?

Vielen Dank für eure Tips und Gruss,
Marco
 

Lesen sie die antworten

#1 Thomas Scheidegger
29/09/2008 - 09:21 | Warnen spam
Hallo Marco

Vermutung: Ich nehme mal an, das man mit dem Attribut "ExactSpelling=true"
das Framework daran hindert in der DLL nach der gewünschten Funktion zu
suchen (z.b. ANSI oder Unitcode Methoden), und der Aufruf schneller
ausgeführt werden kann.
Geht da das Framework immer wieder die Einsprungadresse suchen oder wird
das nur einmal gemacht?



DLL laden (falls nicht schon geladen) und Einsprungadresse suchen
werden natürlich nur einmal (beim ersten DllImport-Aufruf) gemacht.


...mit mehrfachen Aufrufen des selben WinAPI Calls?



alle folgenden Aufrufe sind meist sehr schnell,
insbesondere wenn nur wenige & simple Parameter (+Rückgabewert)
übergeben werden müssen.

Ein klassicher PInvoke-Unsinn,
der etliches Speicher+Zeit frisst, wàre bei String-Parameter
unter einem NT-OS die Ansi-APIs zu nutzen anstelle Unicode [bzw Auto].


Gibt es noch weitere "Tricks" mit welchen ich mehr Tempo rausholen kann?



kaum [korrekter/optimaler DllImport vorausgesetzt],
meistens liegt es nicht am Aufruf selber,
sondern am eigentlichen API dahinter.

In einigen Fàllen / Situationen nützt evtl. noch
SuppressUnmanagedCodeSecurityAttribute
aber mit Vorsicht.



Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen