Каков самый быстрый метод IPC для Программы.NET?

Именованные каналы? XML-RPC? Стандартный ввод - вывод? Веб-сервисы?

Я не использовал бы небезопасный материал как Общая память и подобный

8
задан John Saunders 23 March 2010 в 17:26
поделиться

3 ответа

Названные трубы были бы самым быстрым методом, , но он работает только для связи между процессами на одном компьютере. Связь по именованным трубам не проходит весь сетевой стек (потому что работает только для связи на одном компьютере), поэтому всегда будет быстрее.

Анонимные Трубы могут использоваться только на локальной машине. Однако, именованные трубы могут пересекать сеть.

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

Так что это зависит от того, нужно ли вам только обмениваться данными между процессами на одном и том же компьютере или на разных компьютерах. Любой протокол взаимодействия на основе XML (например, Web Services) обычно будет медленнее из-за больших накладных расходов в XML.

.
8
ответ дан 5 December 2019 в 10:41
поделиться

Windows Messaging является одним из самых быстрых способов для IPC, в конце концов, Windows построена на них.

Можно использовать WM_COPYDATA с вызовами IPInvoke для обмена данными между 2 приложениями .Net на основе форм, и у меня есть библиотека с открытым исходным кодом именно для этого. Я отметил около 1771 гсу/с на довольно горячем ноутбуке.

http://thecodeking.github.com/XDMessaging.Net

2
ответ дан 5 December 2019 в 10:41
поделиться

Я не думаю, что есть быстрый ответ на этот вопрос.на вашем месте я бы купил / одолжил копию Advanced Programming in the Unix Environment (APUE) Стивенса и Раго и прочитал главы 15 и 16 по IPC. Это блестящая книга, если вы действительно хотите понять, как * nix (многое из этого применимо к любой системе POSIX) работает вплоть до уровня ядра.

Если вам нужен быстрый ответ, я бы сказал следующее (не вдаваясь в подробности) в порядке убывания эффективности:

IPC локального компьютера

Сетевые IPC / Интернет-сокеты

На обоих уровнях вам придется подумать о том, как данные, которые вы передаете, кодируются / декодируются, и найти компромисс между использованием памяти и загрузкой ЦП.

На сетевом уровне вам нужно будет решить, какие уровни протоколов вы собираетесь запускать поверх. Чаще всего в нижней части прикладного уровня вы будете выбирать между TCP / IP или UDP. TCP имеет гораздо больше накладных расходов, так как он выполняет исправление ошибок, контрольную сумму и многое другое. если вам нужна доставка сообщений по порядку, вам нужно использовать TCP, а не UDP.

Помимо этого, существуют другие протоколы, такие как HTTP, SOAP (поверх HTTP или другого протокола, такого как FTP / SMTP и т. Д.). Двоичный протокол будет более эффективным, если вы привязаны к сети, а не к процессору. При использовании SOAP на MS.Net, то двоичное кодирование сообщений по сети будет быстрее, но может потребовать больше ресурсов ЦП.

Я мог бы продолжить. это не простой вопрос. Изучение того, где находятся задержки и как обрабатывается буферизация, является ключом к возможности принимать решения о компромиссах, которые вы всегда вынуждены делать с IPC. Я бы порекомендовал приведенную выше книгу APUE, если вы действительно хотите знать, что происходит под капотом ...

6
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

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