繁体   English   中英

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

[英]What's the fastest IPC method for a .NET Program?

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

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

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

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

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

我认为没有一个快速的答案。 如果我是你,我会 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书......

Windows Messaging是IPC的最快方式之一,后面的所有Windows都是基于它构建的。

可以将WM_COPYDATA与IPInvoke调用一起使用,以在两个基于表单的.Net应用程序之间交换数据,并且我有一个开源库来完成这项工作。 我在一台相当热的笔记本电脑上以1771 msg /秒的速度进行了标记。

http://thecodeking.github.com/XDMessaging.Net

我不知道为什么你不会使用共享内存,但它在同一台机器上从C#到C#应用程序的速度非常快 ,并且非常可靠(与TCP套接字不同)。 spazzarama / SharedMemory是一个出色的C#lib,它支持使用简单的高级API的共享数组和缓冲区。 您只需使用公共内存文件名(在客户端/服务器端)初始化该类,然后更新该阵列。 价值神奇地出现在另一边!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM