3

私は基本的に、.NET 4.0 で、インスタンスをシリアル化せずにプログラム/プロセス間でインスタンスを渡す方法を探しています。

はい、古き良き 100% 安全でないポインターがありません ;)

.NET 4.0 へのメモリ マップト ファイルの新しい統合は、それを使用して「ネイティブに」参照/ポインターを渡すことができる場所を読んで、私を助けると思いました。

しかし、次のようなことをしようとすると

var mmf = MemoryMappedFile.CreateFromFile(@"C:\temp\test.mp", FileMode.Create, "mmf",
                                          1024*1024*300, 
                                          MemoryMappedFileAccess.ReadWrite);
var ss = new SimpleStruct();
ss.items = _items; //Collection of Items objects
var FileMapView = mmf.CreateViewAccessor();
FileMapView.Write<SimpleStruct>(0, ref ss); //Exception

次の ArgumentException が発生します。

The specified Type must be a struct containing no references.

MMF を使用して参照を渡すことは可能ですか? そうでない場合、プログラム/プロセスにインスタンスを渡す方法はありますか?

4

1 に答える 1

3

アンマネージ コードでもそれは不可能です。ポインター値は別のプロセスでは意味がありません。マネージ オブジェクトはガベージ コレクション ヒープ上にあり、MMF ビューのアドレスと一致することはありません。たとえそれが何らかの形であったとしても、ガベージ コレクターは大混乱を引き起こします。MMF がサポートされるまでに 4 つのバージョンの .NET が必要だった主な理由。

管理対象オブジェクトをビューにシリアライズすることは避けられません。

于 2010-03-11T03:46:41.317 に答える