2013-06-12 13 views
5

私は現在、通信する必要のある2つの別々のプログラム用のC#(Pythonも使用できます)プラグインを開発中です。最初の最初のプログラムでは、3Dジオメトリをエッジ、ポイント、法線などに分解します。次に、このデータのすべてを、再構築する2番目のプログラムのプラグインに送ります。理想的には、これは物事を「リアルタイム」に保つためにできるだけ早く起こります。2つのC#プログラムの間で大量のデータを送信

現在、私のデータをJSONで変換し、JSONをディスクに書き出しています。その後、私の2番目のプログラムはファイルの変更を監視し、ファイルを読み取り、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の構文解析を行うとよいでしょう)。

関連する問題