У меня есть исполняемый файл C++, который мне нужно интегрировать в свое приложение.NET. Экземпляр C++ является специализированным калькулятором, который будет очень часто вызываться при длительной обработке некоторых больших данных. Для этого мне нужно, чтобы интеграция была максимально эффективной.
С точки зрения эффективности, есть ли какое-либо преимущество в том, чтобы обернуть код C++ в CLR.dll, который затем я могу использовать непосредственно из моего.NET-приложения только с использованием Process.Stat и разбора выходного потока?
Когда вы используете Process.Start(), он создает новое приложение, выделение памяти и планирование задач - это лоб. учитывая, что вы вызываете его много раз, вы должны сделать это в DLL и использовать функцию. поскольку загруженная DLL всегда будет в памяти и работает быстрее.
скажем, что есть изменение в параметре exe, вы можете не поймать его достаточно быстро, если он упакован в DLL, а затем его более контролируется. контракты сильнее.
Запуск отдельного процесса предполагает создание большого количества служебных данных для этого процесса и потоков. Он также будет загружаться/выгружаться в памяти каждый раз. DLL может быть загружена в память один раз и выполняется много раз в основном потоке. Таким образом, определенную эффективность можно получить, отправив маршрут dll. Независимо от того, стоит ли это ДЕЙСТВИТЕЛЬНО, это компромисс между тем, как много работать, чтобы обернуть его в dll и насколько эффективно вы действительно выиграете.
Вы сказали, что это будет часто называться. Если это означает тысячи раз, это, вероятно, стоит положить в dll. Но на самом деле измерение - это единственный способ точно знать, сколько разницы он будет делать.