簡體   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