我有一个核心 .NET 应用程序需要生成任意数量的子进程。这些进程需要能够访问核心应用程序中某种形式的状态对象。
最好的技术是什么?我将在进程(位图)之间移动大量数据,因此它需要快速。
WCF 可能符合要求。
这是一篇关于 .NET 远程处理的非常好的文章,用于执行分布式密集分析。虽然远程处理已被 WCF 取代,但这篇文章是相关的,并展示了如何异步进行调用等。
本文将 WCF 与 .NET 远程处理进行了对比——编辑:这里的关键点表明 WCF 吞吐量优于远程处理小数据,但随着数据大小的增加接近远程处理性能。
我有类似的要求,现在正在使用Windows Communication Foundation来执行此操作。不过,我的数据大小可能要小一些。
作为参考,我在四核机器上执行大约 30-60 个每秒约 5K-30K 的请求。到目前为止,WCF 一直保持得很好。
使用 WCF,您可以获得选择适合您的应用程序的传输协议和安全模式的额外优势。
我会犹豫移动大数据,我倾向于移动指向大数据的指针,而不是内存映射文件。
您可以使用 .NET 远程处理与IpcChannel进行进程间通信 (IPC) 。否则,您可以搜索共享内存包装器和其他 IPC 形式。
编辑:有一篇MSDN 文章将 WCF 与包括 Remoting 在内的各种方法进行了比较。但是,除非我读错了条形图,否则它显示远程处理相同或稍好(与其他评论不同)。还有一篇关于 WCF 与 Remoting 的博文。博客文章清楚地表明远程处理二进制对象的速度更快,如果您传递位图(二进制对象),那么远程处理或共享内存或其他 IPC 选项似乎可能更快,尽管 WCF 可能不是一个坏选择。
如果您确实需要单独的进程,那么总是有命名管道可以很好地执行。
但是,AppDomain 边界是否足够?然后你可以进行对象编组,事情会容易得多。您的应用程序可以通过使用MarshalByRefObject属性来处理同一对象的共享实例。