web-dev-qa-db-ja.com

Windows 7で最速IPCメソッド

Windows 7で可能な最速のプロセス間通信(IPC)メソッドは何ですか?メモリブロックのみを共有したい(双方向)。

それはReadProcessMemoryまたは他の何かですか?プレーンCを使用したいのですが、たとえば、BoostライブラリはIPCに何を使用しますか?

37
Cartesius00

ReadProcessMemoryは、IPCメソッドとしてリストされるべきではありません。はい、そのまま使用できますが、主にデバッグ目的で存在します(参照を確認する場合は、カテゴリ「デバッグ機能」の下)、プロセスのメモリを指定されたバッファにコピーするため、copiesであるため、「実際の」共有メモリよりも確実に遅くなります。実際の共有メモリにはこのオーバーヘッドはありません。

IPC Windowsでサポートされているメソッドの完全なリストが利用可能です MSDNで ;それでも、メモリブロックを共有したい2つのアプリケーションがある場合は、作成する必要がありますCreateFileMapping/MapViewOfFileを使用した名前付きメモリマップファイル(ページングファイルによってバッキング)。これは最も簡単で最速の方法です。ファイルマッピングの詳細は そのページ MSDN.

関連するBoost IPCクラス は、共有メモリのシンラッパーとして機能しますが、関連するシステム固有のAPIへの呼び出しのみをカプセル化しますが、最終的には共有メモリブロックへの通常のポインタを取得するため、操作はネイティブAPIを使用するのと同じくらい高速になります。

このため、 Boost.Interprocess を使用することをお勧めします。これは、移植性があり、C++に優しい(RAIIセマンティクスを提供する)ため、共有メモリブロックの作成後のパフォーマンスの低下はありません(it canは共有メモリに追加の機能を提供しますが、それらはすべてオプトインです-共有メモリだけが必要な場合はそれを取得します)。

48
Matteo Italia