Межпроцессное взаимодействие в .NET - PullRequest
5 голосов
/ 24 октября 2008

У меня есть основное приложение .NET, которое должно порождать произвольное количество подпроцессов. Эти процессы должны иметь возможность доступа к некоторой форме объекта состояния в основном приложении.

Какая техника самая лучшая? Я буду перемещать большой объем данных между процессами (растровые изображения), поэтому он должен быть быстрым.

Ответы [ 6 ]

5 голосов
/ 24 октября 2008

WCF, вероятно, будет отвечать всем требованиям ...

Вот действительно хорошая статья о .NET remoting для выполнения распределенного интенсивного анализа. Хотя удаленное взаимодействие было заменено на WCF, статья актуальна и показывает, как выполнять вызовы асинхронно и т. Д.

Эта статья противопоставляет WCF удаленному удаленному взаимодействию .NET - EDIT : здесь показано, что пропускная способность WCF выполняет удаленное взаимодействие для небольших данных, но приближается к производительности удаленного взаимодействия с увеличением размера данных .

4 голосов
/ 24 октября 2008

Я не решался бы перемещать большие данные, я был бы склонен вместо этого перемещать указатели на большие данные, т.е. файлы, отображаемые в память.

4 голосов
/ 24 октября 2008

У меня аналогичные требования, и я использую Windows Communication Foundation , чтобы сделать это прямо сейчас. Мои размеры данных, вероятно, немного меньше.

Для справки: я выполняю около 30-60 запросов со скоростью 5K-30K в секунду на четырехъядерном компьютере WCF пока держится неплохо.

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

3 голосов
/ 24 октября 2008

Вы можете использовать .NET remoting для межпроцессного взаимодействия (IPC) с IpcChannel . В противном случае вы можете искать обертки совместно используемой памяти и другие формы IPC.

РЕДАКТИРОВАТЬ: В статье MSDN сравнивается WCF с различными методами, включая Remoting. Однако, если я не читаю гистограмму неправильно, она показывает, что Remoting будет такой же или чуть лучше (в отличие от другого комментария). Есть также сообщение в блоге о WCF против Remoting. В сообщении блога ясно показано, что удаленное взаимодействие быстрее для двоичных объектов, и если вы передаете битовые карты (двоичные объекты), то кажется, что удаленное взаимодействие, совместная память или другие параметры IPC могут быть быстрее, хотя WCF может и не быть плохим выбором.

3 голосов
/ 24 октября 2008

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

Однако будет ли достаточной граница AppDomain? Тогда вы могли бы сделать маршалинг объектов, и все было бы намного проще. Ваше приложение может работать с общими экземплярами одного и того же объекта, используя атрибут MarshalByRefObject .

0 голосов
/ 11 октября 2010

Также возможно использование Eneter Messaging Framework. Фреймворк предлагает использовать компонент брокера, где все клиенты могут быть подписаны для получения уведомлений при изменении состояния. Для того, чтобы связать клиентов с брокером. Фреймворк предлагает Named Pipes, Tcp или Http. Но, похоже, лучше всего использовать именованные каналы.

Более подробную информацию о платформе можно найти по тексту ссылки .

...