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

我得到以下参数异常:

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 回答