Технологии
vip
Подключение DLL - вопрос №185163
Вызов методя из dll(com clr c++) из программы на C# происходит катострофиески медленно, порядка 0,3 милисекунды при том что сам метод отрабатывает за 0,1 милисекунды. Куда деваются 0,3 милисекунды и как ускорить вывов этого метода?
Дополнение автора от январь 20, 2012 г., 16:51:25
ответы типа «C# медленный » не принмаются, также можно сказать что с++ убог и не логичен, а асм вообще для извращенцев, это не решит проблему.
Алексей Чудинов январь 19, 2012 г.
-
Всего ответов: 2
-
с# довольно «медленный» язык, у него есть свой сборщик мусора. Поэтому всё зависит от того как память выделяется под вызов этого метода. Для работы в масштабе реального времени C# не подходит(особенно если вызывает методы из DLL не с#)
-
при вызове внешних функций и управляемого кода (в частности 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# есть средства для ручного описания маршалинга, в т.ч. для повышения производительности
Похожие вопросы