任意の数のサブプロセスを生成する必要があるコア .NET アプリケーションがあります。これらのプロセスは、コア アプリケーション内の何らかの形式の状態オブジェクトにアクセスできる必要があります。
最高のテクニックは何ですか?プロセス (ビットマップ) 間で大量のデータを移動するので、高速である必要があります。
WCFはおそらく法案に適合します。
これは、分散集中分析を実行するための.NETリモーティングに関する非常に優れた記事です。リモーティングはWCFに置き換えられましたが、この記事は関連性があり、非同期で呼び出しを行う方法などを示しています。
この記事では、WCFと.NETリモーティングを対比しています-編集:ここで重要な点は、WCFスループットが小さなデータのリモーティングよりも優れているが、データサイズが大きくなるにつれてリモーティングのパフォーマンスに近づくことを示しています。
同様の要件があり、現在Windows Communication Foundationを使用してそれを行っています。ただし、私のデータサイズはおそらく少し小さいです。
参考までに、クアッドコアマシンで毎秒約5K〜30Kの約30〜60のリクエストを行っています。これまでのところ、WCF は非常によく持ちこたえています。
WCF を使用すると、アプリケーションに適したトランスポート プロトコルとセキュリティ モードを選択できるという利点が追加されます。
大きなデータを移動するのをためらうでしょう。代わりに、大きなデータへのポインターを移動する傾向があります。つまり、メモリマップされたファイルです。
本当に個別のプロセスが必要な場合は、非常にうまく機能する名前付きパイプが常にあります。
しかし、AppDomain の境界で十分でしょうか? 次に、オブジェクトのマーシャリングを行うことができ、物事はずっと簡単になります. アプリケーションは、 MarshalByRefObject属性を使用して、同じオブジェクトの共有インスタンスを操作できます。
IpcChannelでプロセス間通信 (IPC) に .NET リモート処理を使用できます。それ以外の場合は、共有メモリ ラッパーやその他の IPC フォームを検索できます。
編集: WCF をリモート処理を含むさまざまな方法と比較するMSDN の記事があります。ただし、棒グラフを間違って読んでいない限り、Remoting は同じか、わずかに優れていることがわかります (他のコメントとは異なります)。WCF vs. Remoting に関するブログ投稿もあります。ブログ投稿は、リモーティングがバイナリ オブジェクトの方が高速であることを明確に示しています。ビットマップ (バイナリ オブジェクト) を渡す場合は、リモーティングまたは共有メモリまたはその他の IPC オプションの方が高速である可能性がありますが、とにかく WCF が悪い選択ではない可能性があります。