2011-08-30 36 views
2

我想從C應用程序向C#應用程序發送大量字符串(〜250000)作爲< 1秒。當我用WM_COPYDATA和SendMessage完成時,我的C#應用​​程序掛起。我還可以做些什麼?命名管道只包含在.NET 4中,而我正在使用.NET 2.我要堅持使用WM_COPYDATA並追加到列表中(這是一種快速操作)。然後後處理這個列表。C和C#應用程序之間IPC最快的方​​式是什麼?

+1

這個SO問題有關於在.NET中使用共享內存的信息:http://stackoverflow.com/questions/439787/how-to-implement-shared-memory-in-net如果進程在同一臺機器上,很難獲得比這更快的速度。 –

回答

5

最快的選擇可能是使用named pipes via P/Invoke。這仍然比大多數其他IPC選項的性能高得多。

+0

不確定,但我認爲這段代碼是越野車。它發送一些字符串,然後停止(從C應用程序端) – blez

+1

@blez:確保閱讀該帖子底部的註釋 - 有一些標記用於需要設置的重疊IO,這些標記不在原來的帖子... –

1

不是最快在Win32目前,但值得一試:0mq

使用在Windows TCP套接字,但很有效。

對於一個封閉的源溶液我不認爲29西方Ultra Messaging可以很容易地壓倒,包括零拷貝消息的在.NET

4

共享存儲器中的罕見的功能或MMF是最快的方法。它與內核對象一樣快,用於發送關於數據可用性的信號。而且,更重要的是,您可以先打開共享內存,然後將數據直接放在那裏(節省一次複製操作)併發送給其他應用程序。其他應用程序可以直接從共享內存中使用數據(同樣,不需要複製)。

相關問題