Сколько времени типичные издержки добавляются путем называния .dll записанным в C++ из приложения 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);
Существует ли более эффективный способ сделать это?
Прочтите эту статью о том, как повысить производительность взаимодействия. Что делать и чего лучше избегать.
Вы говорите о накладных расходах при вызове собственного метода? Если так, то я не думаю, что это вообще важно, поскольку таких вызовов много в библиотеках классов .NET framework.
На вопрос, значительны ли накладные расходы для вашего сценария, можно ответить, только выполнив измерения производительности и сравнив их с ожидаемыми.
Маршалинг в собственный метод будет стоить три выделения памяти из кучи NT, что не так уж и плохо. Это вызывает беспокойство у делегата.