Можно ли передать «указатель» экземпляра другому процессу через файл, отображенный в памяти? - PullRequest
3 голосов
/ 11 марта 2010

Я в основном ищу способ передачи экземпляров по программам / процессам без сериализации экземпляров в .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? Если это не так, есть ли способ вообще передавать экземпляры программам / процессам?

1 Ответ

3 голосов
/ 11 марта 2010

Это невозможно в неуправляемом коде, значение указателя не имеет смысла в другом процессе. Управляемые объекты живут в куче мусора, которая никогда не будет совпадать с адресом представления MMF. Даже если это так или иначе, сборщик мусора вызовет хаос. Основные причины, по которым для поддержки MMF потребовалось 4 версии .NET.

Сериализация управляемых объектов в представлении неизбежна.

...