Windows 7 で、あるプログラムから別のプログラムに大量のデータ (~10MB) を送信する必要があります。非常に低いシステム負荷で、少なくとも毎秒 1 ギガバイトの総スループットを可能にする方法が必要です。これを単純化するために、すべての BLOB を同じサイズにすることができ、1 つのプログラムを別のプログラムの子プロセスにすることができます。
方法 1:両方のプログラムで同じファイルをメモリ マップする: CreateFileMapping() / MapViewOfFile()
この場合、メモリ マップされたファイルには、リング バッファーに複数の BLOB 用のスペースが含まれていると考えられます。リング バッファへのアクセスを同期するには、何らかの外部メカニズムが必要です。
方法 2:名前付きデータ セクションを作成する
方法 3: WriteProcessMemory (以下の Hristo Iliev の提案、ありがとう!)
方法 4: RAM ディスク上のファイルの読み取り/書き込み。
方法 5: 匿名パイプへの読み取り/書き込み。
方法 ?: 他に何か? おそらくTCPを介して書き込み、MPIを使用します...
私は、メモリ マップト ファイル (方法 1) がこの問題の標準的な解決策と見なされていることを知っています :)
メモリ マップト ファイルの速度は? (大まかなオーダー)
もっと速い方法はありますか?
他の方法のパフォーマンスはどれくらい悪いですか? GB/秒のスループットを達成できるのはどれですか?
メモリ マップされたファイルを使用している場合、プログラムが渡されるデータへのアクセスを同期するための最良の方法は何ですか? (つまり、プロデューサーは新しい BLOB が利用可能であることをコンシューマーにどのように示し、コンシューマーは特定の BLOB でそれが完了したことをどのように示すでしょうか?)
メモリ マップ ファイルを使用する場合、すべての BLOB をまとめて 1 つのファイル (ファイル内のリング バッファー) と、BLOB ごとに 1 つのファイル (ファイルのリング バッファー) のどちらを使用するのがよいでしょうか?