Прямо сейчас .NET не поддерживает разделы (также называемые Memory Mapped Files). Это скоро, версия 4.0 имеет пространство имен System.IO.MemoryMappedFiles. Есть веская причина, по которой это заняло так много времени, а также причина, по которой вы не будете довольны этим дополнением. Использование указателей является обязательным в MMF, общая память предоставляется по определенному адресу. Чтобы поделиться значением, вам нужно записать его по определенному адресу.
Однако указатели принципиально несовместимы с моделью управляемой памяти. Объекты создаются в куче мусора, сборщик перемещает их по мере необходимости, чтобы сохранить кучу компактной. В управляемом языке у вас есть ссылка на такой объект, также известный как «дескриптор отслеживания». Эквивалент C / C ++ является указателем, но он с колоколами, сборщик мусора всегда может найти его и обновить его значение. CLR поддерживает понятие «закрепление», оно преобразует ссылку на указатель. Он реализует это, помечая объект как неподвижный. Это, однако, не помогает реализовать разделяемую память через MMF, объект закрепляется в куче GC вместо адреса виртуальной памяти, где находится представление MMF.
Чтобы заставить работать MMF, объект должен быть скопирован из кучи GC в общую память. Это требует сериализации. Класс .NET 4.0 называется MemoryMappedViewStream. Вы, вероятно, можете видеть, куда это идет, это неотличимо от использования именованного канала или сокета. Получение данных в и из MMF требует одинакового усилия. MMF лишь немного более эффективен, поскольку базовый буфер не находится в пуле памяти ядра.
Ты можешь нарушить правила и сделать это сегодня. Вы можете P / Invoke CreateFileMapping, OpenFileMapping и MapViewOfFile вам нужно создать MMF. И используйте ключевое слово unsafe, чтобы вы могли создавать указатели. Вам нужно будет использовать типы значений (например, struct) для элементов общей памяти или класс Marshal.