.NET中的进程间通信

时间:2008-10-24 02:51:34

标签: c# .net ipc

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

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

6 个答案:

答案 0 :(得分:5)

WCF可能符合该法案......

这是执行分布式密集分析的really good article on .NET remoting。虽然远程处理已经被WCF取代,但文章是相关的,并展示了如何异步进行调用等。

article contrasts WCF to .NET remoting - EDIT :此处的关键消息显示,WCF吞吐量输出会对小数据执行远程处理,但随着数据大小的增加而接近远程处理性能。

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

如果你真的需要有单独的流程,那么Named Pipes总是会有很好的表现。

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

答案 4 :(得分:3)

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

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

答案 5 :(得分:0)

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

有关该框架的更多信息,请访问link text