2010-03-03 3 views
5

Как долго типичные накладные расходы добавляются путем вызова .dll, написанного на C++ из приложения C#, используя следующий синтаксис?Выполнение вызова неуправляемого .dll с 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); 

Есть ли более эффективный способ сделать это?

ответ

1

Вы говорите об издержках вызова метода native? Если это так, я не думаю, что это вообще важно, поскольку таких вызовов в библиотеках классов .NET.

Теперь, если накладные расходы являются значимыми для вашего сценария, можно ответить только на выполнение измерений производительности и сравнение их с тем, что вы ожидаете.

0

Маршаллинг в нативный метод будет стоить три выделения памяти из кучи NT, что не так уж плохо. Возвращение делегата вызывает беспокойство.

0

Хороший способ проверить такого рода вещи броска в точке разрыва, где вы делаете звонки. Не знаю, когда загружена библиотека, поэтому, возможно, проверьте только точку останова при втором вызове (если не стоит загружать стоимость). Затем откройте окно дизассемблирования в визуальной студии и посмотрите, сколько строк есть перед вызовом вашей DLL-функции.