Связь между приложениями - PullRequest
6 голосов
/ 03 марта 2011

У меня есть 3 варианта: сокеты, activeX, com, для связи между приложениями на одном компьютере.Что быстрее?

Ответы [ 8 ]

11 голосов
/ 03 марта 2011

Пока это работает на одной машине, межпроцессное взаимодействие существенно ограничено пропускной способностью шины.Копия из памяти в память, выполняется ли она в стеке TCP / IP, код поддержки именованного канала или разделяемая память.Это делает их одинаково эффективными.

Однако важна одна деталь: объем передаваемых данных и количество программных уровней, через которые вы проходите, чтобы выполнить свою работу.Пропускная способность шины памяти регулируется только при большом объеме данных.Это не обязательно так для протокола удаленного вызова процедур, такого как COM.Только аргументы вызова функции должны быть сериализованы, это может быть всего несколько байтов, если вы не передадите массивы.Теперь издержки начинают иметь значение, и их достаточно много, когда вы используете протокол высокого уровня, такой как COM.

Очевидным недостатком использования сокетов является то, что вам придется писать весь код де / сериализации.сам.Нетривиально, если протокол с компонентом не прост.Обмен вашего рабочего времени для удобства является типичным выбором, только вы можете сделать это.

9 голосов
/ 03 марта 2011

Хорошо, подумайте - сокет - это самый низкий уровень, COM использует сокеты, ActiveX использует COM.Так какой из них быстрее?Конечно, розетки.Но это только если вы спрашиваете о скорости выполнения программы и скорости передачи данных.Однако разработка программ с использованием сокетов может быть намного сложнее, если вы не знаете, что делаете.Не говоря уже о том, что вы можете придумать плохую реализацию, которая будет хуже, чем COM.Кроме того, для сокетов не так много компонентов для повторного использования, которые вы можете получить с помощью ActiveX, не говоря уже о том, что если вы хотите общаться с MS Office, вам придется использовать COM.

2 голосов
/ 03 марта 2011

Я бы также делегировал IPC в структуру, например ACE (адаптивная коммуникационная структура). Например, реализация Ace стабильна и кроссплатформенна.

2 голосов
/ 03 марта 2011

Вы не даете много подробностей о том, что вы пытаетесь сделать или какие соображения вам нужно сделать. Например, под «быстрой» вы подразумеваете высокую пропускную способность? Низкая задержка? Есть ли вероятность того, что вам может понадобиться общаться через компьютеры позже? И т.д.

Тем не менее, ActiveX является частным случаем COM ( введение в activeX ). Если вы уже знакомы с COM или ActiveX и, в зависимости от того, что именно вы пытаетесь сделать, вам, возможно, удастся сойтись с написанием относительно небольшого кода, потому что инструменты MS dev могут справиться с большим количеством его за вас.

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

1 голос
/ 20 марта 2011

ActiveX - это более или менее причудливое маркетинговое имя для COM (компонент / элемент управления ActiveX - это объект, который просто поддерживает интерфейс IUnknown), поэтому ваш выбор на самом деле сводится к COM и Socket.

Для межпроцессного взаимодействия вы можете написать что-то быстрее с сокетами ... если вы хороший сокет и программист Windows, потому что вы будете сами по себе, так как сокеты в основном ничего не делают для помочь тебе. Это не означает, что COM не быстрый или имеет плохую производительность, но теоретически вы всегда можете добиться большего успеха, чем готовая система, но только если вы освоите все это.

И последнее: если вам нужно взаимодействовать с продуктами сторонних производителей или другими платформами, отличными от Windows, сокеты более переносимы.

1 голос
/ 03 марта 2011

Это может не иметь значения, что быстрее. Если это так, то выберите метод, который будет наиболее удобным для разработки и поддержки. Может быть возможно сэкономить ваше собственное время, даже если вы не можете сохранить измеряемое время выполнения.

1 голос
/ 03 марта 2011

Привет, вы можете использовать общую память?Даже Oracle использует совместно используемую память в своих продуктах.Общая память быстрая.

0 голосов
/ 03 марта 2011

Трудно сказать, что быстрее, но использование COM, безусловно, является наиболее гибким из перечисленных вариантов. Если вы не любите обходить потоки байтов.

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