.NET中的进程间通信

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

哪种技术最好?我将在进程之间传输大量数据(位图),因此速度需要快。

5个回答

5

WCF可能是最合适的选择。

这是一篇非常好的.NET Remoting文章,用于执行分布式强化分析。虽然Remoting已被WCF取代,但该文章仍然相关,并展示了如何进行异步调用等内容。

这篇文章将WCF与.NET Remoting进行对比——关键的收获在于,对于小数据,WCF的吞吐量优于Remoting,但随着数据大小的增加,它的性能趋近于Remoting。


4
我有类似的需求,目前正在使用 Windows Communication Foundation。我的数据大小可能会小一些。
作为参考,我每秒大约进行30-60个请求,每个请求的大小在5KB-30KB左右,并在四核计算机上运行。WCF 到目前为止一直表现得很好。
使用 WCF,您可以选择适合您的应用程序的传输协议和安全模式。

第一个链接已经(实际上)失效了。它重定向到一个通用页面。 - Peter Mortensen

4

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


我认为Jarvis的意思是,使用内存映射文件在两个或多个进程之间共享内存。 - Jonke
2
当然。内存映射文件是专门设计用于在进程之间共享内存的。有趣的是,C# 4.0现在具有内置的MMF类,可用于完成此任务。 - Tim Jarvis

3
如果您确实需要单独的进程,那么总有命名管道可以表现得非常好。
然而,应用程序域边界是否足够?然后,您可以进行对象编组,事情将变得更加容易。您的应用程序可以通过使用MarshalByRefObject属性来共享相同对象的实例。

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

一篇MSDN文章将WCF与各种方法进行比较,包括Remoting。 然而,除非我读取条形图错误,否则它显示Remoting与其他评论所说的相同或稍微更好。

还有一篇关于WCF和Remoting的博客文章。这篇博客文章清晰地展示了Remoting在处理二进制对象时更快,如果你要传递位图(二进制对象),那么似乎Remoting或共享内存或其他IPC选项可能更快,尽管选择WCF也不是一个坏选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接