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