Неуправляемые и управляемые параметры: соображения производительности - PullRequest
0 голосов
/ 30 апреля 2009

Предварительно: вызывающий является собственным EXE-файлом, который предоставляет тип архитектуры "плагина". Он предназначен для загрузки DLL (по имени, указанному в командной строке arg). Эта DLL должна быть встроенной и экспортировать сигнатуру определенной функции. EXE - это C ++, что не так уж важно, так как EXE - это черный ящик (его нельзя изменить / перекомпилировать). Собственная DLL-библиотека может удовлетворить потребности приложения, полностью реализовав решение непосредственно в указанной DLL-библиотеке. Однако требуется, чтобы реальная работа (таким образом превращая собственную DLL в тонкую оболочку / шлюз) была закодирована в C #. Это приводит меня к 3 вариантам (если есть еще, пожалуйста, поделитесь):

  1. Собственная DLL загружает C ++ / Cli DLL, которая внутренне использует библиотеку классов C #
  2. Собственная DLL взаимодействует с C # COM-объектом через CCW
  3. Собственная DLL-библиотека размещает CLR и выполняет вызовы сборки C #

Еще одно требование заключается в том, что не только нативной DLL нужен способ отправки сообщений (функций вызова) на C #, но и C # должен иметь возможность инициировать события / обратный вызов в нативную DLL, когда происходят некоторые необычные вещи ( в отличие от выключения и возвращения). Теперь последнее, что я не знаю, как справиться с третьим вариантом, но это совсем другой вопрос.

Итак, к делу: производительность. Любая информация относительно этих подходов (при условии, что они все соответствуют требованиям)? Из моего исследования я понимаю, что 2 будет иметь больше издержек, чем 1, но я не уверен на 100%, поэтому я здесь. Что касается 3, у меня просто нет никакой информации.

Так что, если кто-то имел дело с этим (или знает другой элегантный вариант), пожалуйста, включите.

Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2009

Я сделал вариант 1 раньше, с разумным успехом. Я не помню каких-либо существенных последствий для производительности, хотя мое приложение не сильно требовало высокой производительности. Мне кажется, что если возникают проблемы с производительностью, вероятным виновником могут быть частые, небольшие переходы между нативными и управляемыми. Можно ли их пакетировать на уровне C ++ / CLI?

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