2011-08-03 29 views
0

我們有兩個應用程序,本機C++應用程序和創建輸入的託管C#/ WPF UI,執行&讀取本機應用程序生成的輸出。目前,兩者之間的通信是使用XML &純文本文件完成的。從Unmannaged C++應用程序發送大量數據到託管C#

但是,輸出數據量很大&我們正在尋找更好的方法來解決這個問題。使用類似Memorystream的解決方案將是理想的,因爲它可以輕鬆地將輸出生成從文件流切換到內存流。

但是,如何彌合託管的&未管理的差距?什麼是最有效的方法來做到這一點?

注意:許多與此有關的問題都是關於從管理到未損壞的dll的函數調用。這是兩個獨立運行的獨立應用程序。 UI生成本地應用程序,這是兩者之間唯一的聯繫。

感謝

回答

0

這取決於你生產的方式/消耗數據

  • 命名管道或插座 - 數據絡繹不絕
  • 共享內存 - 連續更新的數據
+0

-1。內部命名管道在同一臺計算機上使用共享內存。 – TomTom

+0

我知道。所以呢 ?這並不意味着你不應該使用共享內存。如果海報只更新大數據的小部分,那麼使用共享內存和同步代替管道/套接字是上帝的主意 – cprogrammer

+0

我同意@cprogrammer。這就像說SQL使用I/O訪問,因此不應該使用。這是一個可能有用的附加抽象。 –

0

爲什麼不使用標準輸入/輸出?您的C++程序可以使用普通的「printf」或「cout」命令寫入標準輸出。例如,您的.NET應用程序可以使用http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx來捕獲這些數據。標準輸入也是如此:使用stdin向C++程序發送命令。

使用命名管道很好,如果您需要兩個以上的流,可能會是答案。但是在C++的最後,可能會有更多的工作。

+0

我們已經使用它從本地應用程序向UI發送狀態更新,但這是真正發送大量數據(50 MB +)的有效方式嗎? – user474762

+0

試試看...測試這個概念很簡單。或者,只需使用命名管道即可。如果標準輸出速度夠快,我不會感到驚訝。我想問題是:你需要多快? –

相關問題