2010-03-03 15 views
5

cuánto tiempo es la sobrecarga típica añadió llamando a un .dll escrita en C++ desde una aplicación de C# utilizando la siguiente sintaxis?Rendimiento de la Llamada .dll no administrado desde C#

[DllImport("abc.dll", EntryPoint = "xcFoo", CallingConvention = CallingConvention.Cdecl)] 
public extern static Result Foo(out IntPtr session, 
       [MarshalAs(UnmanagedType.FunctionPtr)]ObjectCallback callback, 
       UInt64 turnKey, 
       string serverAddress, 
       string userId, 
       string password); 

¿Hay una manera más eficiente de hacerlo?

Respuesta

1

¿Estás hablando de la sobrecarga de invocar el método nativo? Si es así, no creo que sea significativo en absoluto, ya que hay muchas llamadas en las bibliotecas de clases de .NET Framework.

Ahora, si la sobrecarga es importante para su escenario sólo puede ser respondida por hacer mediciones de rendimiento, y comparándolos con lo que espera.

0

El cálculo de referencias en el método nativo tendrá un costo de tres asignaciones de memoria del montón NT, que no es tan malo. Es el delegado de vuelta que se preocupa un poco.

0

Un buen método para comprobar este tipo de cosas es un tiro en un punto de equilibrio en el que hacer llamadas. No sé cuándo está cargada la biblioteca, así que tal vez solo verifique el punto de interrupción en la segunda llamada (a menos que el costo de carga sea su principal preocupación). Luego abra la ventana de desensamblaje en Visual Studio y vea cuántas líneas hay antes de invocar su función dll.

Cuestiones relacionadas