什么是.NET程序最快的IPC方法?

The*_*ult 8 c# mono ipc

命名管道?XML-RPC?标准输入输出?网页服务 ?

我不会使用像共享内存等类似的不安全的东西

Jac*_*ius 8

命名管道是最快的方法,但它只适用于同一台计算机上的进程之间的通信.命名管道通信不会一直沿着网络堆栈(因为它只适用于同一台计算机上的通信)所以它总是会更快.

我遗漏了共享内存,因为你特别提到你不想走那条路.共享内存甚至比命名管道更快.

因此,这取决于您是否只需要在同一台计算机或不同计算机上的进程之间进行通信.由于XML中的大量开销,任何基于XML的通信协议(例如,Web服务)通常都会变慢.

  • 命名管道*可以*和**用于与远程进程通信.它是*匿名管道*,只能用于本地进程. (6认同)
  • 是的,命名管道用于客户端/服务器通信,就像套接字一样,但与套接字不同,某些客户端操作系统不能是"服务器". (4认同)

bil*_*izz 6

我不认为这是一个快速的答案.如果我是你,我会 Stevens和Rago 的Unix环境(APUE)中购买/借用高级编程的副本,并阅读关于IPC的第15章和第16章.如果您真的想了解*nix(其中很多适用于任何POSIX系统)是如何工作到内核级别的,那么这本书是一本精彩的书.

如果你必须有一个快速的答案,我会说以下(没有大量的思考),按效率的降序排列:

本地机器IPC

网络IPC/Internet套接字

在这两个级别,您将不得不考虑如何对传输的数据进行编码/解码,并在内存使用和CPU利用率之间进行权衡.

在网络级别,您将不得不考虑将要运行的protcols层.最常见的是,在应用程序层的底部,您将选择TCP/IP或UDP.TCP有更多的开销,因为它有纠错,校验和和许多其他东西.如果您需要按顺序传递消息,则需要使用TCP而不是UDP.

除此之外还有其他协议,如HTTP,SOAP(在HTTP之上或其他协议,如FTP/SMTP等).只要您是网络绑定而不是CPU绑定,二进制协议将更有效.如果在MS.Net平台上使用SOAP,那么消息的二进制编码将在网络上更快,但可能会占用更多CPU.

我可以继续 这不是一个简单的问题.学习延迟是什么以及如何处理缓冲是能够决定你总是被迫使用IPC的权衡的关键.如果你真的想知道引擎盖下发生了什么,我会推荐上面的APUE书......

  • 是的,但他也说单声道,没有什么能阻止你在C#或任何其他语言中使用这些方法.C#是一种语言.不是操作系统.我认为有点不公平地标记了我的答案...... (4认同)