C#中的IPC机制 – 使用和最佳实践

前段时间我在win32代码中使用过IPC。 [关键部分,事件和信号量]

.NET环境下的场景如何? 是否有任何教程解释所有可用的选项,何时使用,为什么?

微软最近在IPC的东西是Windows Communication Foundation 。 实际上在下层没有什么新东西(tcp,upd,命名管道等),但WCF大大简化了IPC的开发。

有用的资源:

  • 在Dobb博士的门户上与WCF进行进程间通信
  • WCF通信.NET Framework 3.5中的选项

当然还有WCF上的MSDN

我倾向于使用命名管道或Unix套接字(取决于我是否瞄准MS.NET或单声道 – 我有一个抽象它的类),因为它易于使用,便携,并允许我轻松地与非托管代码进行互操作。 也就是说,如果你只是处理托管代码,那么就使用WCF或者远程处理 – 如果你需要Mono支持,那么后者就是后者,因为他们的WCF支持根本就不存在。

除了明显的(WCF)之外,还有一个C#/ CLR的ZeroMQ绑定,这个绑定非常好:

http://www.zeromq.org/bindings:clr

面向消息的IPC,pub / sub和其他各种比WCF少得多的代码和配置的策略。

如果你需要低延迟的通信,它的速度至少要比其它任何事情快一个数量级,而且延迟也要小一些。

尊重信号量,锁定,互斥锁等。如果你通过通信而不是通过共享进行共享,那么你就会比传统的范例少一点麻烦。

我建议使用内存映射文件,如果你需要在机器域使用不通过网络通信。 请参阅以下链接。

http://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4-wcf-vs.html

这听起来好像你对同步技术而不是通信感兴趣。 如果是这样,你可能想从这里开始,或者这个更简洁的概述 。

还有.NET Remoting,我发现它很酷,但我想现在他们已经过时了,他们有WCF。