Выполнение вызова неуправляемого .dll от C#

Сколько времени типичные издержки добавляются путем называния .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);

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

5
задан Michael Covelli 3 March 2010 в 22:51
поделиться

3 ответа

Прочтите эту статью о том, как повысить производительность взаимодействия. Что делать и чего лучше избегать.

http://msdn.microsoft.com/en-us/library/ms998551.aspx

7
ответ дан 14 December 2019 в 04:36
поделиться

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

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

1
ответ дан 14 December 2019 в 04:36
поделиться

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

0
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: