Механизмы IPC в C# — использование и лучшие практики
Вопрос
Некоторое время назад я использовал IPC в коде Win32.[Критические разделы, события и семафоры]
Как выглядит сцена в среде .NET?Есть ли какое-либо руководство, объясняющее все доступные параметры, а также когда их использовать и почему?
Решение
Последние разработки Microsoft в области IPC: Фонд связи Windows.На самом деле на нижнем уровне нет ничего нового (tcp, upd, именованные каналы и т. д.), но WCF значительно упрощает разработку IPC.
Полезный ресурс:
- Межпроцессное взаимодействие с WCF на Др.Портал Добба
- Параметры связи WCF в .NET Framework 3.5
и конечно MSDN в WCF
Другие советы
Помимо очевидного (WCF), существует привязка ZeroMQ для C#/CLR, которая довольно хороша:
http://www.zeromq.org/bindings:clr
Использует ориентированный на сообщения IPC, публикацию/подписку и различные другие стратегии с гораздо меньшим количеством кода и настроек, чем WCF.
Кроме того, он как минимум на порядок быстрее, чем что-либо еще, и имеет меньшую задержку, если вам требуется связь с низкой задержкой.
Что касается семафоров, блокировок, мьютексов и т.д.Если вы поделитесь, общаясь, а не общаетесь, делясь, у вас будет гораздо меньше хлопот, чем при традиционной парадигме.
Я обычно использую именованные каналы или сокеты Unix (в зависимости от того, нацеливаюсь ли я на MS.NET или Mono — у меня есть класс, который его абстрагирует), поскольку они просты в использовании, переносимы и позволяют мне легко взаимодействовать с неуправляемым кодом. .Тем не менее, если вы имеете дело только с управляемым кодом, используйте WCF или удаленное взаимодействие — последнее, если вам нужна поддержка Mono, поскольку их поддержки WCF просто еще нет.
Я бы рекомендовал использовать файлы с отображением в памяти, если вам нужно использовать домен компьютера, а не связь через сеть.См. следующую ссылку.
http://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4-wcf-vs.html
Существует также .NET Remoting, который мне показался довольно крутым, но я думаю, что теперь, когда у них есть WCF, они устарели.
Похоже, вас интересуют методы синхронизации, а не общение.Если да, возможно, вы захотите начать здесь, или, возможно, это больше краткий обзор.