NET中的进程间通信

本文关键字:进程间通信 NET | 更新日期: 2023-09-27 17:48:53

我有一个核心.NET应用程序,它需要生成任意数量的子流程。这些进程需要能够访问核心应用程序中某种形式的状态对象。

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

NET中的进程间通信

WCF可能符合要求。

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

本文将WCF与.NET远程处理进行了对比——这里的关键内容表明,WCF吞吐量在小数据方面优于远程处理,但随着数据大小的增加,它接近远程处理性能。

我有类似的需求,现在正在使用Windows Communication Foundation来实现这一点。不过,我的数据大小可能有点小。

作为参考,我在四核机器上每秒处理大约30-60个请求,大约5 KB-30 KB。WCF到目前为止一直保持得很好。

使用WCF,您可以选择适合您的应用程序的传输协议和安全模式,从而获得额外的优势。

我会犹豫是否移动大数据。相反,我倾向于移动指向大数据的指针,即内存映射文件。

如果您真的需要有单独的进程,那么总是有命名的管道可以很好地执行。

但是,应用程序域边界就足够了吗?然后你可以进行对象编组,事情会容易得多。应用程序可以使用MarshalByRefObject属性来处理同一对象的共享实例。

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

MSDN上有一篇文章将WCF与包括Remoting在内的各种方法进行了比较。然而,除非我读错了条形图,否则它显示Remoting是一样的或稍微好一点(与其他评论不同)。

还有一篇关于WCF与Remoting的博客文章。博客文章清楚地表明,远程处理对于二进制对象来说更快,如果你传递位图(二进制对象),那么远程处理或共享内存或其他IPC选项可能会更快,尽管WCF可能不是一个糟糕的选择。