.NET中的进程间通信

我有一个核心.NET应用程序,需要产生一个子进程的abitrary数量。 这些进程需要能够访问核心应用程序中的某种forms的状态对象。

什么是最好的技术? 我将在进程(位图)之间移动大量数据,因此需要快速。

WCF可能适合该法案……

这是一篇关于用于执行分布式密集分析的.NET远程处理的非常好的文章 。 虽然远程处理已被WCF取代,但该文章是相关的,并展示了如何异步进行调用等。

本文将WCF与.NET远程处理进行了对比 – 编辑 :这里的关键要点表明,WCF吞吐量输出对小数据执行远程处理,但随着数据大小的增加接近远程处理性能。

我对移动大数据犹豫不决,我倾向于将指针移动到大数据周围而不是内存映射文件。

我有类似的要求,我正在使用Windows Communication Foundation来做到这一点。 我的数据大小可能稍微小一些。

作为参考,我在四核机器上做大约30-60次每秒约5K-30K的请求。 到目前为止,WCF一直保持良好状态。

使用WCF,您可以选择适合您应用程序的传输协议和安全模式。

如果你真的需要单独的过程,总会有名称管道 ,它会表现得很好。

但是,AppDomain边界是否足够? 然后你可以做对象编组,事情会容易得多。 您的应用程序可以使用MarshalByRefObject属性处理同一对象的共享实例。

您可以使用.NET远程处理与IpcChannel进行进程间通信(IPC)。 否则,您可以搜索共享内存包装和其他IPC表单。

编辑:有一篇MSDN文章将WCF与包括远程处理在内的各种方法进行了比较。 但是,除非我正在阅读错误的条形图,否则它显示Remoting相同或略好一些(与其他评论不同)。 还有一篇关于WCF与Remoting的博客文章 。 博客文章清楚地显示Remoting对于二进制对象更快,如果你传递Bitmaps(二进制对象),那么看起来远程处理或共享内存或其他IPC选项可能会更快,尽管WCF可能不是一个糟糕的选择。

也可以使用Eneter Messaging Framework。 该框架提供使用代理组件,其中所有客户端都可以订阅以在状态更改时获得通知。 为了将客户端与代理连接起来。 该框架提供命名管道,Tcp或Http。 但它看起来最好是使用命名管道。

有关框架的更多信息可以在链接文本中找到。