2011-01-02 5 views
8

私は完全に管理された.NET用の共有メモリの実装を探しています(P/Invokeは互換性があり、C++/CLIは混在していません)。完全に管理された共有メモリの.NET実装ですか?

+0

と、MSILにコンパイルされた、混合されていない(例えば '/ clr:pure'でコンパイルされた)C++/CLIはどうでしょうか? –

+1

メモリを共有するのは簡単ですが、プリミティブ型だけを共有できることを理解していますか? (そしておそらくすべてのメンバーがプリミティブである値の型) –

+0

もう一つの有効なオプションはNamedPipes –

答えて

8

.NET 4.0 BCLでサポートされているMemory-Mapped Filesを探しているようですね。

.NET Frameworkバージョン4以降では、Win32でのメモリマップファイルの管理の説明に従って、ネイティブWindows関数がメモリマップファイルにアクセスするのと同じ方法でマネージコードを使用してメモリマップファイルにアクセスできます。 MSDNライブラリ

+0

それらのように見え、共有ミューテックスはそのトリックをやるつもりです。結局のところ、私はちょうどいくつかの財政的なもののために2つのプロセスに渡って非常に低い遅延でいくつかの倍を渡す必要があります。ありがとう – em70

15

まあ、.NETフレームワークは無料です。 .NET 4.0では、System.IO.MemoryMappedFiles名前空間クラスがサポートされています。共有メモリは、ガベージコレクタの概念とかなり劇的なインピーダンスの不一致です。そのため、しばらく時間がかかりました。ポインタを使用しない限り、GCヒープからMMFビューへのコピーは避けられません。

他のIPCメカニズムも共有メモリを使用しますが、カーネルに組み込まれているため明示的ではありません。これは、すべてほぼ同じ速度で実行され、マッピングをセットアップするためのマイクロ秒、次にメモリ間コピーを行うためのバス帯域幅だけが実行されます。毎秒5ギガバイトがあなたが走るのが最も遅いです。

+0

便利なパフォーマンス情報ありがとう、+1 :) – em70

2

This articleは、セクション3で、P/Invokeを使用してMapViewOfFileとフレンドをラップする方法を説明しています。

関連する問題