Производительность вызова неуправляемого .dll из C # - PullRequest
5 голосов
/ 04 марта 2010

Как долго типичные накладные расходы добавляются путем вызова .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 ]

7 голосов
/ 04 марта 2010

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

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

1 голос
/ 04 марта 2010

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

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

0 голосов
/ 25 января 2019

я знаю, что этот вопрос старый, но мне удалось невероятно быстро вызывать нативные функции, используя не только инструкцию CIL calli, но и специальный трюк, но, разумеется, вам нужно самостоятельно обрабатывать аргументы пиннига и / или маршаллинга, если вы работаете со сложными типамивключая строки ..

0 голосов
/ 03 мая 2011

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

0 голосов
/ 04 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...