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引用?如果不是,是否有任何方法在所有傳遞程序/進程的實例?
我可以很容易從上下文中推斷出數據的含義,即數據的類型。這基本上意味着我會知道如何將我的「空白」指針轉換回它的真實類型。這兩個過程當然會共享一個定義一些常見類型的通用程序集。我想我會喜歡看到的是* pin *託管實例的能力,就像您可以使用非託管類型一樣。 – 2010-03-11 04:08:12
它不能通過設計工作。被管理對象的內存佈局是不可發現的。例如,JIT編譯器通過對結構的字段進行重新排序來利用該優勢,以實現正確的對齊和最小的總大小。投射一個IntPtr需要Marshal.PtrToStructure()。受管版本的memcpy()。 – 2010-03-11 04:20:42