Который имеет лучшую производительность: выполнение сценария Perl из C ++ с помощью системного вызова или вызов файла DLL? - PullRequest
2 голосов
/ 05 февраля 2011

Я новичок в C ++.

Я хотел выполнить скрипт Perl (который управляет оборудованием) внутри приложения C ++ Visual Studio Win32.Мне было интересно, что было бы наиболее оптимизированным подходом в этом отношении?

  1. Вызовите системную функцию и выполните этот конкретный Perl-файл.
  2. Создайте какую-нибудь DLL и вызовите эту DLL внутри моего C ++ кода.

Вариант 2 Я никогда не использовал, но я готов изучить и реализовать, если это лучший способ.

Ответы [ 3 ]

7 голосов
/ 05 февраля 2011

Я считаю, что «наиболее оптимизированный» подход - это вставлять Perl в ваше приложение.

Ваш второй вариант на самом деле неосуществим, AFAIK. Поскольку Perl не скомпилирован, ваш единственный вариант - вызвать интерпретатор (например, с помощью system() или exec() -семейного вызова), как в первом варианте.

Теперь существует большая разница между встраиванием интерпретатора в ваш код и написанием одной строки кода для вызова внешней программы, так что вы должны точно определить, сколько оптимизации вам нужно. Разница в производительности может быть даже минимальной, поэтому я настоятельно рекомендую сначала попробовать легкий путь, измеряя свой успех.

5 голосов
/ 05 февраля 2011

Я согласен с Ойстейном, что вы вряд ли найдете хороший способ скомпилировать скрипт perl в разделяемую библиотеку.

Однако порождение perl из вашей программы C ++ - не единственный другой вариант.Вы также можете передавать данные между двумя программами, использовать сокет для передачи данных между ними и другие методы IPC.

0 голосов
/ 26 мая 2011

В своем инструменте резервного копирования я однажды пытался вызвать system("perl script.pl"), но он работал очень медленно на Windows (20-30 вызовов в секунду или около того, хотя script.pl в тестовом тесте ничего не делал). В Linux это было намного, намного быстрее.

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