2008-10-24 4 views
5

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

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

ответ

4

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

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

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

3

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

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

4

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

+0

Объясните, как это будет работать через границы процесса. – FlySwat 2008-10-24 03:10:58

3

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

EDIT: есть MSDN article, сравнивающий WCF с различными способами, включая Remoting. Однако, если я не ошибаюсь, я вижу, что Remoting является одним и тем же или немного лучше (в отличие от других комментариев). Существует также blog post о WCF vs. Remoting. Сообщение в блоге ясно показывает, что Remoting быстрее для двоичных объектов, и если вы передаете Bitmaps (двоичные объекты), то кажется, что Remoting или shared memory или другой параметр IPC может быть быстрее, хотя WCF может и не быть плохим выбором.

5

WCF, вероятно, соответствует законопроект ...

Вот really good article on .NET remoting для выполнения распределенного интенсивного анализа. Хотя Remoting был заменен WCF, статья актуальна и показывает, как сделать вызовы асинхронно и т.д.

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

0

Также можно использовать систему обмена сообщениями Eneter. Структура предлагает использовать компонент брокера, где все клиенты могут подписаться на получение уведомлений при изменении состояния. Чтобы подключить клиентов к брокеру. Структура предлагает именованные каналы, Tcp или Http. Но лучше всего использовать Именованные трубы.

Дополнительную информацию о структуре можно найти по адресу: link text.

Смежные вопросы