Выполнение C ++ exe с использованием Process.Start по сравнению с переносом кода C ++ с использованием CLR

0

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

С точки зрения эффективности, есть ли какое-либо преимущество в том, чтобы обернуть код C++ в CLR.dll, который затем я могу использовать непосредственно из моего.NET-приложения только с использованием Process.Stat и разбора выходного потока?

Теги:
clr

2 ответа

1
Лучший ответ

Когда вы используете Process.Start(), он создает новое приложение, выделение памяти и планирование задач - это лоб. учитывая, что вы вызываете его много раз, вы должны сделать это в DLL и использовать функцию. поскольку загруженная DLL всегда будет в памяти и работает быстрее.

скажем, что есть изменение в параметре exe, вы можете не поймать его достаточно быстро, если он упакован в DLL, а затем его более контролируется. контракты сильнее.

  • 0
    Что, если мы используем Process.Start () один раз, а затем просто записываем строку в поток ввода каждый раз, когда нам нужен результат? Заметны ли издержки потока, когда оба приложения находятся в памяти?
  • 0
    @Vlad Важно понимать, когда следует использовать Process.Start. в идеале, если вы владеете кодом для exe, важно, чтобы вы написали dll, а затем использовали dll в вашем приложении переднего плана или .net-приложении. дело не в накладных расходах, которые требуются для запуска с использованием запуска процесса, а в том, что вы имеете гораздо больший контроль над кодом. ошибки, такие как неправильные параметры и возвращаемые типы и исключения, могут быть лучше обработаны, если вы используете DLL.
Показать ещё 1 комментарий
1

Запуск отдельного процесса предполагает создание большого количества служебных данных для этого процесса и потоков. Он также будет загружаться/выгружаться в памяти каждый раз. DLL может быть загружена в память один раз и выполняется много раз в основном потоке. Таким образом, определенную эффективность можно получить, отправив маршрут dll. Независимо от того, стоит ли это ДЕЙСТВИТЕЛЬНО, это компромисс между тем, как много работать, чтобы обернуть его в dll и насколько эффективно вы действительно выиграете.

Вы сказали, что это будет часто называться. Если это означает тысячи раз, это, вероятно, стоит положить в dll. Но на самом деле измерение - это единственный способ точно знать, сколько разницы он будет делать.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню