【问题标题】:Interprocess communication in .NET.NET 中的进程间通信
【发布时间】:2010-09-18 22:35:01
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net ipc


    【解决方案1】:

    WCF 可能符合要求。

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

    article contrasts WCF to .NET remoting -- 编辑:这里的关键点表明 WCF 吞吐量优于远程处理小数据,但随着数据大小的增加接近远程处理性能。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我认为 Jarvis 的意思是,使用内存映射文件在两个或多个进程之间共享内存。
      • 当然。内存映射文件专门设计为能够在进程之间共享内存。有趣的是,C# 4.0 现在已经为这个任务内置了 MMF 类。
      【解决方案3】:

      我有类似的要求,我现在正在使用Windows Communication Foundation 来做这件事。不过我的数据量可能会小一些。

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

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

      【讨论】:

        【解决方案4】:

        如果您确实需要单独的进程,总有Named Pipes 可以很好地执行。

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2010-09-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-04
            相关资源
            最近更新 更多