Технологии

vip

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

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

Дополнение автора от январь 20, 2012 г., 16:51:25

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

Алексей Чудинов январь 19, 2012 г.

  • Всего ответов: 2

  • Крутиков А - аватарка

    Крутиков А

    152-й в Технологиях

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

    январь 19, 2012 г.
  • Константин Жук - аватарка

    Константин Жук

    1-й в

    при вызове внешних функций и управляемого кода (в частности 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, 2012 г.

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