Подключение DLL - вопрос №185163

Вызов методя из dll(com clr c++) из программы на C# происходит катострофиески медленно, порядка 0,3 милисекунды при том что сам метод отрабатывает за 0,1 милисекунды. Куда деваются 0,3 милисекунды и как ускорить вывов этого метода?



Дополнение автора от 20.01.12 17:51:25

ответы типа «C# медленный » не принмаются, также можно сказать что с++ убог и не логичен, а асм вообще для извращенцев, это не решит проблему.

Ответы

с# довольно «медленный» язык, у него есть свой сборщик мусора. Поэтому всё зависит от того как память выделяется под вызов этого метода. Для работы в масштабе реального времени C# не подходит(особенно если вызывает методы из DLL не с#)

19.01.12

при вызове внешних функций и управляемого кода (в частности C#) просходит маршалинг данных — управлиемое преобразование данны, подготовка копии данных для обработки внешним кодом, преобразование возвращаемых данных, выделение и освобождение памяти для временных копий на обеих фазах

http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D1%88%D0%B0%D0%BB%D0%B8%D0%BD%D0%B3

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

ps:

1 — маршалинг не имеет ни какого отношения к механизму фоновой сборки мусора

2 — c# позволяет писать весьма быстрый код

http://www.gotdotnet.ru/blogs/gsaf/2872/

 pps кстати в C# есть средства для ручного описания маршалинга, в т.ч. для повышения производительности

22.01.12
Посмотреть всех экспертов из раздела Технологии > .Net/C#
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store