2013-06-12 39 views
5

我目前正在爲兩個需要通信的獨立程序開發一個C#(我可以使用python)插件。在第一個程序中,我將三維幾何解構爲邊,點,法線等。然後,我將所有這些數據發送到我的第二個程序中的插件以進行重建。理想情況下,這將盡可能快地發生,以保持我「真正的時間」。在兩個C#程序之間發送大量數據

目前,我正在用JSON轉換我的數據,並將JSON寫入磁盤。然後我的第二個程序監視文件更改,然後讀取文件並使用JSON數據。

到目前爲止,我整個插件的最大瓶頸是讀/寫過程。必須有比寫入文件更快的方法。

+1

MemoryMappedFiles:http://msdn.microsoft.com/en-us/library/dd997372.aspx。在開始使用文件時你必須做一些共享,但之後它將全部在RAM上完成。 –

+1

使用命名管道。查看'NamedPipeServerStream'和'NamedPipeClientStream' –

+1

MemoryMappedFile將引入儘可能多的問題,因爲它解決了。 –

回答

3

有幾種使用進程間通信的方法。
最爲人熟知的是在不同的機器之間使用:WCF(.NET 3.5)和Remoting(.NET 2)

對於機上通信,您可以選擇使用命名管道或內存映射文件。

內存映射文件與您的解決方案類似,因爲它們使用頁面文件作爲備份。

我認爲命名管道解決方案是最方便的: 您設置了一個「服務器」流並等待某個「客戶端」連接。 然後,您就像通過任何其他流一樣傳輸數據。

Here's NamedPipeServerStream
And this is NamedPipeClientStream
這裏的代碼示例非常多。

+0

謝謝!我已經閱讀了一些關於內存映射文件的內容,但我不確定這是否是要走的路。我想我會嘗試命名管道。 – rgathmann

0

我認爲帶有命名管道的WCF可以完成這項工作,您只需創建傳輸對象,這些對象將被序列化,並且它將全部由WCF自動完成,或者您可以準備將​​現有對象按名稱管道的開銷不大。使用json會很好,但它會創建額外的圖層,並且使用WCF可以傳輸可以立即使用而不需要json進行翻譯的對象。 (真的,他們被翻譯成XML,但你不是自己做,所以它是更好的,你可以做解析JSON我認爲)。

相關問題